diff --git a/.ci/daint.cscs.ch/Jenkinsfile b/.ci/daint.cscs.ch/Jenkinsfile.off similarity index 100% rename from .ci/daint.cscs.ch/Jenkinsfile rename to .ci/daint.cscs.ch/Jenkinsfile.off diff --git a/.ci/daint.cscs.ch/ocl.build.sh b/.ci/daint.cscs.ch/ocl.build.sh index ef788d6a9ce..9c4c421de89 100755 --- a/.ci/daint.cscs.ch/ocl.build.sh +++ b/.ci/daint.cscs.ch/ocl.build.sh @@ -27,7 +27,7 @@ if [ ! -d "${HOME}/libxsmm" ]; then fi cd "${HOME}/libxsmm" git fetch -git checkout 05705477183444a82c8d9be8d7c2627efd6d67fa +git checkout 2fe2b1a7077ddfbc9ab3b3f7ba1f5a45d52549cb make -j cd .. diff --git a/.ci/daint.cscs.ch/ocl.test.sh b/.ci/daint.cscs.ch/ocl.test.sh index ccf3aa298ad..83131d1de4c 100755 --- a/.ci/daint.cscs.ch/ocl.test.sh +++ b/.ci/daint.cscs.ch/ocl.test.sh @@ -32,7 +32,7 @@ export OMP_PROC_BIND=TRUE # set thread affinity # OMP_NUM_THREADS is set by cmake # use default parameters (omit loading tuned parameters) -export OPENCL_LIBSMM_SMM_PARAMS=0 +#export OPENCL_LIBSMM_SMM_PARAMS=0 # document the current environment env |& tee -a "${STAGE_NAME}.out" diff --git a/.github/workflows/testing-linux.yml b/.github/workflows/testing-linux.yml index 32a7d300365..477eccf07ed 100644 --- a/.github/workflows/testing-linux.yml +++ b/.github/workflows/testing-linux.yml @@ -57,6 +57,7 @@ jobs: -DMPI_EXECUTABLE_SUFFIX=.${{ matrix.mpi_suffix }} \ -DMPIEXEC_PREFLAGS="$([ "${{ matrix.mpi_suffix }}" = "openmpi" ] && echo "-mca btl ^openib --allow-run-as-root --oversubscribe")" \ -DLCOV_ARGS="--test-name;${{ matrix.use_mpi }}-${{ matrix.use_openmp }}-${{ matrix.use_smm }}-cpu" \ + -DTEST_MPI_RANKS=auto \ .. - name: Build diff --git a/.github/workflows/testing-macos.yml b/.github/workflows/testing-macos.yml index 6c5228b521f..41098be17a7 100644 --- a/.github/workflows/testing-macos.yml +++ b/.github/workflows/testing-macos.yml @@ -6,10 +6,6 @@ on: - 'develop' pull_request: -# Workaround issue in Xcode 14.1/2 -env: - DEVELOPER_DIR: /Applications/Xcode_14.0.1.app/Contents/Developer - jobs: build-and-test: runs-on: macos-latest @@ -45,7 +41,7 @@ jobs: mkdir -p build cd build env \ - CC=gcc-12 CXX=g++-12 FC=gfortran-12 \ + CC=gcc-14 CXX=g++-14 FC=gfortran-14 \ cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DUSE_${{ matrix.use_mpi }} \ @@ -53,7 +49,7 @@ jobs: -DUSE_${{ matrix.use_smm }} \ $([ "${{ matrix.blas_impl }}" = "openblas" ] && echo '-DCMAKE_PREFIX_PATH=/usr/local/opt/openblas') \ -DMPIEXEC_PREFLAGS="$([ "${{ matrix.mpi_suffix }}" = "openmpi" ] && echo "-mca btl ^openib --allow-run-as-root")" \ - -DTEST_MPI_RANKS=1 \ + -DTEST_MPI_RANKS=auto \ .. - name: Build diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a43656db2b9..71f3056f1a5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ fail_fast: false minimum_pre_commit_version: 3.2.0 repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: 'v0.3.2' + rev: 'v0.4.10' hooks: - id: ruff args: [ --fix, --exit-non-zero-on-fix ] @@ -15,13 +15,13 @@ repos: .cp2k/.*| )$ - repo: https://github.com/psf/black - rev: 24.2.0 + rev: 24.4.2 hooks: - id: black name: Reformat Python files with the black code formatter files: '^.*(/PACKAGE)|(\.py)$' - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: check-ast - id: check-yaml diff --git a/.pre-commit/headers/c_cpp.3 b/.pre-commit/headers/c_cpp.3 new file mode 100644 index 00000000000..dffab6af0d4 --- /dev/null +++ b/.pre-commit/headers/c_cpp.3 @@ -0,0 +1,8 @@ +/*------------------------------------------------------------------------------------------------*/ +/* Copyright (C) by the DBCSR developers group - All rights reserved */ +/* This file is part of the DBCSR library. */ +/* */ +/* For information on the license, see the LICENSE file. */ +/* For further information please visit https://dbcsr.cp2k.org */ +/* SPDX-License-Identifier: BSD-3-Clause */ +/*------------------------------------------------------------------------------------------------*/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 21f9b8ff9a9..f2cfc725446 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ cmake_dependent_option(WITH_EXAMPLES "Build the examples" ON "USE_MPI" OFF )# all examples require MPI set(TEST_MPI_RANKS - "auto" + 2 CACHE STRING "Number of MPI ranks for testing") set(TEST_OMP_THREADS 2 diff --git a/VERSION b/VERSION index 78fa0e9f008..d79801d41d9 100644 --- a/VERSION +++ b/VERSION @@ -1,8 +1,8 @@ MAJOR = 2 MINOR = 7 -PATCH = 0-rc1 +PATCH = 0-rc2 # A specific DATE (YYYY-MM-DD) fixes an official release, otherwise # it is considered Development version. -DATE = 2024-03-13 +DATE = 2024-06-27 diff --git a/cmake/CompilerConfiguration.cmake b/cmake/CompilerConfiguration.cmake index 1b3c8959abd..b2b68dc8d8e 100644 --- a/cmake/CompilerConfiguration.cmake +++ b/cmake/CompilerConfiguration.cmake @@ -1,9 +1,12 @@ if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-form -std=f2008ts -fimplicit-none -Werror=aliasing -Werror=ampersand -Werror=c-binding-type -Werror=intrinsic-shadow -Werror=intrinsics-std -Werror=line-truncation -Werror=tabs -Werror=target-lifetime -Werror=underflow -Werror=unused-but-set-parameter -Werror=unused-but-set-variable -Werror=unused-variable -Werror=unused-dummy-argument -Werror=conversion -Werror=zerotrip -Werror=uninitialized -Wno-maybe-uninitialized -Werror=unused-parameter") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10) - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Werror=argument-mismatch") # gcc 10+ has this automatically + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-form -std=f2008ts -fimplicit-none -Werror=aliasing -Werror=ampersand -Werror=c-binding-type -Werror=intrinsic-shadow -Werror=intrinsics-std -Werror=line-truncation -Werror=tabs -Werror=target-lifetime -Werror=underflow -Werror=unused-but-set-parameter -Werror=unused-but-set-variable -Werror=unused-variable -Werror=unused-dummy-argument -Werror=conversion -Werror=zerotrip -Wno-maybe-uninitialized -Werror=unused-parameter") + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10) # comparison against CXX version rather than GFortran version + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") # required for 10+ (MPI wrap) else () - set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fallow-argument-mismatch") # requires for 10+ for the MPI wrap module + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Werror=argument-mismatch") # gcc 10+ has this automatically + endif () + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13) # comparison against CXX version rather than GFortran version + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wno-error=uninitialized") # false positive (allocatable array) endif () set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -g -funroll-loops") set(CMAKE_Fortran_FLAGS_COVERAGE "-O0 -g --coverage -fno-omit-frame-pointer -fcheck=all,no-array-temps -ffpe-trap=invalid,zero,overflow -fbacktrace -finit-real=snan -finit-integer=-42 -finit-derived -Werror=realloc-lhs -finline-matmul-limit=0 -Werror") @@ -48,6 +51,9 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") if ((NOT (USE_MPI)) OR (NOT ("${MPI_Fortran_LIBRARY_VERSION_STRING}" MATCHES "Open MPI"))) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=leak") endif () + if (USE_ACCEL MATCHES "hip" AND hip_VERSION GREATER_EQUAL 6.0.0) # Remove deprecated function error with ROCm v6+ + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=deprecated-declarations") + endif () elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -funroll-loops") set(CMAKE_CXX_FLAGS_COVERAGE "-O0 -g --coverage") diff --git a/docs/guide/2-user-guide/1-installation/index.md b/docs/guide/2-user-guide/1-installation/index.md index 33d71864284..1c091558026 100644 --- a/docs/guide/2-user-guide/1-installation/index.md +++ b/docs/guide/2-user-guide/1-installation/index.md @@ -76,8 +76,8 @@ make -DWITH_GPU= -DCMAKE_BUILD_TYPE= -DBUILD_TESTING= --DTEST_MPI_RANKS= --DTEST_OMP_THREADS=<2,N> +-DTEST_MPI_RANKS=<2|auto|N> +-DTEST_OMP_THREADS=<2|N> ``` When providing a build of LIBXSMM, make sure the `lib` directory is added to the `PKG_CONFIG_PATH` variable prior diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0fd94a00f16..3bd5901e1fc 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -8,6 +8,9 @@ foreach (dbcsr_program_src ${DBCSR_PROGRAM_SRCS_FTN}) get_filename_component(dbcsr_program_name ${dbcsr_program_src} NAME_WE) add_executable(${dbcsr_program_name} ${dbcsr_program_src}) target_link_libraries(${dbcsr_program_name} dbcsr) + if (OpenMP_FOUND) + target_link_libraries(${dbcsr_program_name} OpenMP::OpenMP_Fortran) + endif () # with the Intel compiler CMake 3.12 seems to forget that the source is # actually Fortran and needs to be told explicitly: @@ -29,6 +32,10 @@ if (WITH_C_API) set(dbcsr_program_name ${dbcsr_program_name}_cpp) add_executable(${dbcsr_program_name} ${dbcsr_program_src}) target_link_libraries(${dbcsr_program_name} dbcsr_c MPI::MPI_CXX) + set_target_properties(${dbcsr_program_name} PROPERTIES LINKER_LANGUAGE CXX) + if (OpenMP_FOUND) + target_link_libraries(${dbcsr_program_name} OpenMP::OpenMP_CXX) + endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "Cray") # for recent Cray compiler versions CMake doesn't know diff --git a/examples/dbcsr_example_3.cpp b/examples/dbcsr_example_3.cpp index a59c4d23adc..a49a169ff4d 100644 --- a/examples/dbcsr_example_3.cpp +++ b/examples/dbcsr_example_3.cpp @@ -53,8 +53,8 @@ int main(int argc, char* argv[]) { for (int i = 0; i != mpi_size; ++i) { if (mpi_rank == i) { - std::cout << "I'm processor " << mpi_rank << " over " << mpi_size << " proc" << ", (" << coord[0] << ", " << coord[1] - << ") in the 2D grid" << std::endl; + std::cout << "I'm processor " << mpi_rank << " over " << mpi_size << " proc" + << ", (" << coord[0] << ", " << coord[1] << ") in the 2D grid" << std::endl; } MPI_Barrier(MPI_COMM_WORLD); } diff --git a/src/acc/acc_bench.h b/src/acc/acc_bench.h index 1371f5f910f..7aef921f653 100644 --- a/src/acc/acc_bench.h +++ b/src/acc/acc_bench.h @@ -25,6 +25,10 @@ # define INLINE #endif +#if !defined(MAX_KERNEL_DIM) +# define MAX_KERNEL_DIM 80 +#endif + #define INIT_MAT(ELEM_TYPE, SEED, MAT, M, N, SCALE) \ do { \ const double init_mat_seed1_ = (SCALE) * (SEED) + (SCALE); \ diff --git a/src/acc/acc_bench_smm.c b/src/acc/acc_bench_smm.c index 381c86864a5..79bf0625f03 100644 --- a/src/acc/acc_bench_smm.c +++ b/src/acc/acc_bench_smm.c @@ -39,7 +39,7 @@ STRIDE_C, INDEX_STRIDE, INDEX_BASE, BATCHSIZE) \ ACC_BENCH_USEOMP(libxsmm_gemm_batch) \ (IPREC, OPREC, TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, STRIDE_A, B, LDB, STRIDE_B, BETA, C, LDC, STRIDE_C, INDEX_STRIDE, \ - INDEX_BASE, BATCHSIZE, 0 /*batchcheck*/) + INDEX_BASE, BATCHSIZE) # define PRINTF(...) \ do { \ const size_t print_buffer_size = sizeof(print_buffer) - print_offset; \ @@ -227,9 +227,7 @@ int main(int argc, char* argv[]) { int ndevices = 0; result = c_dbcsr_acc_get_ndevices(&ndevices); if (0 < ndevices && (0 == device || EXIT_SUCCESS == c_dbcsr_acc_set_active_device(device))) { -#if defined(_DEBUG) - fprintf(stderr, "Activated device %i of %i (device%i).\n", device + 1, ndevices, device); -#endif + printf("Activated device%i (ndevices=%i)\n", device, ndevices); } else { if (0 >= ndevices) { diff --git a/src/acc/acc_bench_trans.c b/src/acc/acc_bench_trans.c index be5643478eb..07101a187df 100644 --- a/src/acc/acc_bench_trans.c +++ b/src/acc/acc_bench_trans.c @@ -123,9 +123,7 @@ int main(int argc, char* argv[]) { if (EXIT_SUCCESS == result) { result = c_dbcsr_acc_get_ndevices(&ndevices); if (0 < ndevices && (0 == device || EXIT_SUCCESS == c_dbcsr_acc_set_active_device(device))) { -#if defined(_DEBUG) - fprintf(stderr, "Activated device %i of %i (device%i).\n", device + 1, ndevices, device); -#endif + printf("Activated device%i (ndevices=%i)\n", device, ndevices); } else { if (0 >= ndevices) { diff --git a/src/acc/cuda/Makefile b/src/acc/cuda/Makefile index 79092692035..4a4b4ab32ac 100644 --- a/src/acc/cuda/Makefile +++ b/src/acc/cuda/Makefile @@ -22,7 +22,7 @@ OBJSMM := $(SRCSMM:.cpp=.o) INCALL := $(INCACC) $(INCSMM) -LIBXSMMROOT := $(wildcard $(ACCDIR)/../../../libxsmm) +LIBXSMMROOT := $(wildcard $(ACCDIR)/../../../../../libxsmm) ifeq (,$(LIBXSMMROOT)) LIBXSMMROOT := $(wildcard $(HOME)/libxsmm) endif @@ -33,6 +33,9 @@ INTEL ?= 0 GNU ?= 0 DEV ?= 0 +# C++ baseline standard +CXXSTD ?= -std=c++14 + # select from set of predefined triplet specifications SPECID ?= 0 # limit shape in tests (zero or negative for unlimited) @@ -118,7 +121,7 @@ else ifneq (0,$(GNU)) else override AR := ar endif - override LD_LIBRARY_DIRS := $(NULL) + #override LD_LIBRARY_DIRS := $(NULL) else CXX := g++ CC := gcc @@ -211,7 +214,7 @@ LD_LIBSTUB_PATH := $(wildcard $(patsubst %,%/stubs,$(LD_LIBRARY_DIRS))) LIBPATHS := $(foreach DIR,$(LD_LIBRARY_DIRS),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR))) LIBSTUBS := $(foreach DIR,$(LD_LIBSTUB_PATH),$(if $(filter -L$(DIR),$(LDFLAGS)),$(NULL),-L$(DIR))) LDFLAGS += $(LIBPATHS) $(LIBSTUBS) -lcudart -lcublas -lnvrtc -lcuda -CXXFLAGS += -std=c++11 $(CFLAGS) +CXXFLAGS += $(CXXSTD) $(CFLAGS) .PHONY: bench bench: $(ACCDIR)/acc_bench_smm $(ACCDIR)/acc_bench_trans @@ -296,15 +299,16 @@ libsmm: $(ACCDIR)/dbcsr_acc_smm.a $(ACCDIR)/dbcsr_acc_smm.a: $(OBJSMM) $(AR) -rs $@ $^ -%.o: %.cu $(INCALL) $(MAKDIR)/Makefile - $(NVCC) $(DFLAGS) -allow-unsupported-compiler --compiler-options="$(CXXFLAGS) $(CFLAGS_XSMM)" -c $< -o $@ - %.o: %.cpp $(INCALL) $(MAKDIR)/Makefile $(CXX) $(DFLAGS) $(CXXFLAGS) $(CFLAGS_XSMM) -c $< -o $@ +%.o: %.cu $(INCALL) $(MAKDIR)/Makefile + $(NVCC) $(DFLAGS) -allow-unsupported-compiler $(CXXSTD) \ + --compiler-options="$(filter-out $(CXXSTD),$(CXXFLAGS)) $(CFLAGS_XSMM)" -c $< -o $@ + $(ACCDIR)/cuda_hip/calculate_norms.o: $(ACCDIR)/cuda_hip/calculate_norms.cpp $(INCALL) $(MAKDIR)/Makefile - $(NVCC) $(DFLAGS) -x cu -allow-unsupported-compiler \ - --compiler-options="$(filter-out -pedantic,$(CXXFLAGS)) $(CFLAGS_XSMM)" -c $< -o $@ + $(NVCC) $(DFLAGS) -allow-unsupported-compiler $(CXXSTD) -x cu \ + --compiler-options="$(filter-out $(CXXSTD) -pedantic,$(CXXFLAGS)) $(CFLAGS_XSMM)" -c $< -o $@ $(MAKDIR)/acc_bench_smm.o: $(ACCDIR)/acc_bench_smm.c $(MAKDIR)/Makefile ifneq (0,$(LIBXSMM)) diff --git a/src/acc/cuda_hip/acc_dev.cpp b/src/acc/cuda_hip/acc_dev.cpp index 9028a4a3c5f..4f3613f26fd 100644 --- a/src/acc/cuda_hip/acc_dev.cpp +++ b/src/acc/cuda_hip/acc_dev.cpp @@ -20,11 +20,6 @@ #include #include -// for debug purpose -#if defined(__HIP_PLATFORM_NVCC__) -static const int verbose_print = 1; -#endif - /****************************************************************************/ extern "C" int c_dbcsr_acc_get_ndevices(int* n_devices) { ACC_API_CALL(GetDeviceCount, (n_devices)); @@ -49,9 +44,11 @@ extern "C" int c_dbcsr_acc_set_active_device(int device_id) { // establish context ACC_API_CALL(Free, (0)); -#if defined(__HIP_PLATFORM_NVCC__) - if (verbose_print) { +#if defined(__CUDA) || defined(__HIP_PLATFORM_NVCC__) + static bool once = false; + if (!once) { ACC_API_CALL(DeviceSetLimit, (ACC(LimitPrintfFifoSize), (size_t)1000000000)); + once = true; } #endif diff --git a/src/acc/cuda_hip/acc_stream.cpp b/src/acc/cuda_hip/acc_stream.cpp index ff3c1bfdab9..d577233e4ea 100644 --- a/src/acc/cuda_hip/acc_stream.cpp +++ b/src/acc/cuda_hip/acc_stream.cpp @@ -51,7 +51,7 @@ extern "C" int c_dbcsr_acc_stream_create(void** stream_p, const char* name, int cErr = ACC(StreamCreate)(acc_stream); } - if (verbose_print) printf("StreamCreate : %p -> %p \n", *stream_p, *acc_stream); + if (verbose_print) printf("StreamCreate : %p -> %p \n", *stream_p, (const void*)*acc_stream); if (acc_error_check(cErr)) return -1; if (acc_error_check(ACC(GetLastError)())) return -1; diff --git a/src/acc/libsmm_acc/README.md b/src/acc/libsmm_acc/README.md index 923003c24e9..faa0aab6806 100644 --- a/src/acc/libsmm_acc/README.md +++ b/src/acc/libsmm_acc/README.md @@ -50,6 +50,8 @@ The performance of the matrix-matrix multiplication kernels is highly dependent ## Contributing to libsmm_acc +We expect users to contribute to the library by providing new optimized kernels and support for new GPUs. + #### Autotuning procedure Follow the [autotuning procedure](https://github.com/cp2k/dbcsr/blob/develop/src/acc/libsmm_acc/tune/README.md) diff --git a/src/acc/libsmm_acc/libsmm_acc.cpp b/src/acc/libsmm_acc/libsmm_acc.cpp index c7c6b044c4d..c25bd701c7d 100644 --- a/src/acc/libsmm_acc/libsmm_acc.cpp +++ b/src/acc/libsmm_acc/libsmm_acc.cpp @@ -52,7 +52,7 @@ inline int launch_kernel_from_handle( } //=========================================================================== -inline void validate_kernel(ACC_DRV(function) & kern_func, ACC_DRV(stream) stream, int threads, int grouping, int m, int n, int k) { +inline int validate_kernel(ACC_DRV(function) & kern_func, ACC_DRV(stream) stream, int threads, int grouping, int m, int n, int k) { libsmm_acc_benchmark_t* h; libsmm_acc_benchmark_init(&h, test, m, n, k); @@ -79,10 +79,11 @@ inline void validate_kernel(ACC_DRV(function) & kern_func, ACC_DRV(stream) strea double sumGPU = checkSum(h->mat_c, h->n_c, m, n); libsmm_acc_benchmark_finalize(h); if (sumGPU != sumCPU) { - printf("Kernel validation failed for multiplication kernel %ix%ix%i\nchecksum CPU: %g, checksum GPU: %g\nchecksum_diff: %g\n", - m, n, k, sumCPU, sumGPU, sumGPU - sumCPU); - exit(1); + // printf("Kernel validation failed for multiplication kernel %ix%ix%i\nchecksum CPU: %g, checksum GPU: %g\nchecksum_diff: %g\n", + // m, n, k, sumCPU, sumGPU, sumGPU - sumCPU); + return 1; } + return 0; } //=========================================================================== @@ -195,30 +196,58 @@ inline void jit_kernel(ACC_DRV(function) & kern_func, libsmm_acc_algo algo, int kernel_map_iterator add_kernel_handle_to_jitted_kernels( - ACC_DRV(function) kern_func, ACC_DRV(stream) stream, Triplet h_mnk, int& threads, int& grouping) { + ACC_DRV(function) kern_func, ACC_DRV(stream) stream, Triplet h_mnk, int& threads, int& grouping, bool& generated_acc_untuned) { kernel_map_iterator kernel_it = kernel_handles.end(); + // Check if the kernel was already generated and failed or if it is too big + if (failed_acc_kernels.find(h_mnk) != failed_acc_kernels.end()) return kernel_it; + + libsmm_acc_algo algo; + int tile_m, tile_n, w, v, minblocks; + // Check whether autotuned parameters are given for this kernel, and if so, retrieve them if (ht.find(h_mnk) != ht.end()) { // Retrieve launching parameters const KernelParameters params = ht.at(h_mnk); - libsmm_acc_algo algo = libsmm_acc_algo(params[0]); // enum {largeDB1, largeDB2, medium, small, tiny} - int tile_m = params[1]; - int tile_n = params[2]; - int w = params[3]; - int v = params[4]; + algo = libsmm_acc_algo(params[0]); // enum {largeDB1, largeDB2, medium, small, tiny} + tile_m = params[1]; + tile_n = params[2]; + w = params[3]; + v = params[4]; threads = params[5]; grouping = params[6]; - int minblocks = params[7]; - - // JIT and validate the kernel - jit_kernel(kern_func, algo, tile_m, tile_n, w, v, threads, grouping, minblocks, h_mnk[0], h_mnk[1], h_mnk[2]); - validate_kernel(kern_func, stream, threads, grouping, h_mnk[0], h_mnk[1], h_mnk[2]); + minblocks = params[7]; + generated_acc_untuned = false; + } + else if (h_mnk[0] < 50 && h_mnk[1] < 50 && h_mnk[2] < 50) { // Use a default untuned kernel + algo = medium; + tile_m = 2; + tile_n = 2; + w = 0; + v = 0; + threads = 256; + grouping = 30; + minblocks = 1; + generated_acc_untuned = true; + } + else { + failed_acc_kernels.insert(h_mnk); + return kernel_it; + } + // JIT and validate the kernel + jit_kernel(kern_func, algo, tile_m, tile_n, w, v, threads, grouping, minblocks, h_mnk[0], h_mnk[1], h_mnk[2]); + if (validate_kernel(kern_func, stream, threads, grouping, h_mnk[0], h_mnk[1], h_mnk[2]) == 0) { // Store the handle to the JIT-ed kernel auto kernel_it_emplaced = kernel_handles.emplace(h_mnk, kernel_launcher(kern_func, threads, grouping)); kernel_it = kernel_it_emplaced.first; } + else { + // The generated kernel gave wrong values, discard it + free(kern_func); + generated_acc_untuned = false; + failed_acc_kernels.insert(h_mnk); + } return kernel_it; } @@ -256,6 +285,8 @@ int libsmm_acc_process_d(const int* param_stack, int stack_size, ACC_DRV(stream) Triplet h_mnk = {m, n, k}; kernel_map_iterator kernel_it; + bool generated_acc_untuned = false; + #if defined _OPENMP # pragma omp critical(jit_multiplication) #endif @@ -264,7 +295,7 @@ int libsmm_acc_process_d(const int* param_stack, int stack_size, ACC_DRV(stream) kernel_it = kernel_handles.find(h_mnk); if (kernel_it == kernel_handles.end()) { // the kernel has not been JIT-ed yet - kernel_it = add_kernel_handle_to_jitted_kernels(kern_func, stream, h_mnk, threads, grouping); + kernel_it = add_kernel_handle_to_jitted_kernels(kern_func, stream, h_mnk, threads, grouping, generated_acc_untuned); } // if the kernel could be jited successfully, the kernel_it iterator now points to the kernel_launcher. // if this wasn't possible, is set to kernel_handles.end() @@ -283,7 +314,9 @@ int libsmm_acc_process_d(const int* param_stack, int stack_size, ACC_DRV(stream) // Construct argument pointer list and launch kernel void* args[] = {¶m_stack, &stack_size, &a_data, &b_data, &c_data}; - return launch_kernel_from_handle(kern_func, ((stack_size + grouping - 1) / grouping), threads, stream, args); + int return_value = launch_kernel_from_handle(kern_func, ((stack_size + grouping - 1) / grouping), threads, stream, args); + + return ((return_value != 0) or (!generated_acc_untuned)) ? return_value : 10; // return 10 for generated default untuned kernel } } @@ -297,9 +330,10 @@ int libsmm_acc_process(const int* param_stack_host, const int* param_stack_dev, // maximum size over any dimension return (libsmm_acc_process_blas((const int*)param_stack_host, stack_size, *((ACC_DRV(stream)*)c_stream), m, n, k, max_kernel_dim, (const double*)a_data, (const double*)b_data, (double*)c_data)); - else + else { return (libsmm_acc_process_d((const int*)param_stack_dev, stack_size, *((ACC_DRV(stream)*)stack_stream), m, n, k, (const double*)a_data, (const double*)b_data, (double*)c_data)); + } } return -10; // datatype not supported } diff --git a/src/acc/libsmm_acc/libsmm_acc.h b/src/acc/libsmm_acc/libsmm_acc.h index cba4f10ca74..115da1adb53 100644 --- a/src/acc/libsmm_acc/libsmm_acc.h +++ b/src/acc/libsmm_acc/libsmm_acc.h @@ -22,6 +22,7 @@ #include #include +#include #include enum libsmm_acc_algo { largeDB1 = 1, largeDB2 = 2, medium = 3, small = 4, tiny = 5 }; @@ -36,6 +37,7 @@ struct kernel_launcher { typedef std::unordered_map::iterator kernel_map_iterator; static std::unordered_map kernel_handles; +static std::unordered_set failed_acc_kernels; int libsmm_acc_process_blas(const int* param_stack_host, int stack_size, ACC_DRV(stream) stream, int m, int n, int k, const double* a_data, const double* b_data, double* c_data); diff --git a/src/acc/libsmm_acc/libsmm_acc_benchmark.cpp b/src/acc/libsmm_acc/libsmm_acc_benchmark.cpp index f1d1a7662ca..c507e97e94a 100644 --- a/src/acc/libsmm_acc/libsmm_acc_benchmark.cpp +++ b/src/acc/libsmm_acc/libsmm_acc_benchmark.cpp @@ -323,8 +323,8 @@ int libsmm_acc_benchmark( //=========================================================================== int libsmm_acc_benchmark_transpose_(int n_stack, int* stack, int* d_stack, double* mat, double* mat_trs, double* d_mat, int n, int mat_m, int mat_n, ACC_DRV(event) start, ACC_DRV(event) stop, char** kernel_descr, TransposeLauncher* launcher) { - if (mat_m > MAX_BLOCK_DIM || mat_n > MAX_BLOCK_DIM) { - printf("Cannot transpose matrices with dimensions above %i, got (%i x %i)\n", MAX_BLOCK_DIM, mat_m, mat_n); + if (mat_m > MAX_KERNEL_DIM || mat_n > MAX_KERNEL_DIM) { + printf("Cannot transpose matrices with dimensions above %i, got (%i x %i)\n", MAX_KERNEL_DIM, mat_m, mat_n); exit(1); } diff --git a/src/acc/libsmm_acc/libsmm_acc_benchmark.h b/src/acc/libsmm_acc/libsmm_acc_benchmark.h index 3d01dcdbbaa..70dd2d5934f 100644 --- a/src/acc/libsmm_acc/libsmm_acc_benchmark.h +++ b/src/acc/libsmm_acc/libsmm_acc_benchmark.h @@ -18,8 +18,6 @@ #include "../acc_libsmm.h" -#define MAX_BLOCK_DIM 80 - typedef int (*KernelLauncher)(const int* param_stack_dev, int stack_size, ACC_DRV(stream) stream, int m, int n, int k, const double* a_data, const double* b_data, double* c_data); diff --git a/src/acc/opencl/Makefile b/src/acc/opencl/Makefile index 81607ad860e..2ac977d8c1a 100644 --- a/src/acc/opencl/Makefile +++ b/src/acc/opencl/Makefile @@ -15,7 +15,7 @@ KERNEL := $(wildcard $(MAKDIR)/smm/kernels/*.cl) INCALL := $(INCACC) $(INCSMM) -LIBXSMMROOT := $(wildcard $(ACCDIR)/../../../libxsmm) +LIBXSMMROOT := $(wildcard $(ACCDIR)/../../../../../libxsmm) ifeq (,$(LIBXSMMROOT)) LIBXSMMROOT := $(wildcard $(HOME)/libxsmm) endif @@ -89,7 +89,7 @@ else ifneq (0,$(GNU)) else override AR := ar endif - override LD_LIBRARY_DIRS := $(NULL) + #override LD_LIBRARY_DIRS := $(NULL) else CXX := g++ CC := gcc diff --git a/src/acc/opencl/acc_opencl.c b/src/acc/opencl/acc_opencl.c index 64756cc7d11..d7d55289775 100644 --- a/src/acc/opencl/acc_opencl.c +++ b/src/acc/opencl/acc_opencl.c @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" @@ -22,11 +22,17 @@ # if defined(__DBCSR_ACC) # include "../acc_libsmm.h" # endif - +# include # include # if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR) # define S_ISDIR(A) ((S_IFMT & (A)) == S_IFDIR) # endif +# if !defined(S_IREAD) +# define S_IREAD S_IRUSR +# endif +# if !defined(S_IWRITE) +# define S_IWRITE S_IWUSR +# endif # if !defined(ACC_OPENCL_NLOCKS) # define ACC_OPENCL_NLOCKS 4 @@ -68,13 +74,6 @@ int c_dbcsr_acc_opencl_active_id; # endif -void __wrap__gfortran_runtime_warning_at(const char* /*where*/, const char* /*message*/, ...); -void __wrap__gfortran_runtime_warning_at(const char* where, const char* message, ...) { - LIBXSMM_UNUSED(message); - LIBXSMM_UNUSED(where); -} - - void c_dbcsr_acc_opencl_notify(const char /*errinfo*/[], const void* /*private_info*/, size_t /*cb*/, void* /*user_data*/); void c_dbcsr_acc_opencl_notify(const char errinfo[], const void* private_info, size_t cb, void* user_data) { LIBXSMM_UNUSED(private_info); @@ -158,7 +157,7 @@ LIBXSMM_ATTRIBUTE_DTOR void c_dbcsr_acc_opencl_finalize(void) { for (i = 0; i < ACC_OPENCL_MAXNDEVS; ++i) { const cl_device_id device_id = c_dbcsr_acc_opencl_config.devices[i]; if (NULL != device_id) { -# if defined(CL_VERSION_1_2) && defined(_DEBUG) +# if defined(CL_VERSION_1_2) && 0 /* avoid potential segfault */ ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(device_id)); # endif /* c_dbcsr_acc_opencl_create_context scans for non-NULL devices */ @@ -223,7 +222,7 @@ int c_dbcsr_acc_init(void) { const int nccs = (NULL == env_nccs ? ACC_OPENCL_NCCS : atoi(env_nccs)); # endif const char *const env_neo = getenv("NEOReadDebugKeys"), *const env_wa = getenv("ACC_OPENCL_WA"); - const int neo = (NULL == env_neo ? 1 : atoi(env_neo)), wa = neo * (NULL == env_wa ? 3 : atoi(env_wa)); + const int neo = (NULL == env_neo ? 1 : atoi(env_neo)); # if defined(ACC_OPENCL_ASYNC) const char* const env_async = (ACC_OPENCL_ASYNC); const int async_default = 3; @@ -268,6 +267,7 @@ int c_dbcsr_acc_init(void) { c_dbcsr_acc_opencl_config.async = (NULL == env_async ? async_default : atoi(env_async)); c_dbcsr_acc_opencl_config.dump = (NULL == env_dump ? /*default*/ 0 : atoi(env_dump)); c_dbcsr_acc_opencl_config.debug = (NULL == env_debug ? c_dbcsr_acc_opencl_config.dump : atoi(env_debug)); + c_dbcsr_acc_opencl_config.wa = neo * (NULL == env_wa ? 31 : atoi(env_wa)); if (EXIT_SUCCESS != c_dbcsr_acc_opencl_device_uid(NULL /*device*/, env_devmatch, &c_dbcsr_acc_opencl_config.devmatch)) { c_dbcsr_acc_opencl_config.devmatch = 1; } @@ -284,12 +284,12 @@ int c_dbcsr_acc_init(void) { ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(ze_flat)); /* soft-error */ } # if defined(ACC_OPENCL_NCCS) - if (NULL == getenv("ZEX_NUMBER_OF_CCS") && 0 != nccs) { + if (NULL == getenv("ZEX_NUMBER_OF_CCS") && 0 != nccs && 0 == (1 & c_dbcsr_acc_opencl_config.wa)) { static char zex_nccs[ACC_OPENCL_MAXNDEVS * 8 + 32] = "ZEX_NUMBER_OF_CCS="; int j = strlen(zex_nccs); for (i = 0; i < ACC_OPENCL_MAXNDEVS; ++i) { const char* const istr = (0 < i ? ",%u:%i" : "%u:%i"); - const int n = LIBXSMM_SNPRINTF(zex_nccs + j, sizeof(zex_nccs) - j, istr, i, LIBXSMM_MAX(nccs, 1)); + const int n = LIBXSMM_SNPRINTF(zex_nccs + j, sizeof(zex_nccs) - j, istr, i, LIBXSMM_CLMP(nccs, 1, 4)); if (0 < n) j += n; else { j = 0; @@ -300,14 +300,14 @@ int c_dbcsr_acc_init(void) { if (0 < j) ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(zex_nccs)); /* soft-error */ } # endif - if (0 != wa) { /* environment is populated before touching the compute runtime */ + if (~1 & c_dbcsr_acc_opencl_config.wa) { /* environment is populated before touching the compute runtime */ static char* key_value[] = { "NEOReadDebugKeys=1", "EnableRecoverablePageFaults=0", "DirectSubmissionOverrideBlitterSupport=0"}; if (NULL == env_neo) ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(key_value[0])); - if (0 != (1 & wa) && NULL == getenv("EnableRecoverablePageFaults")) { + if ((2 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv("EnableRecoverablePageFaults")) { ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(key_value[1])); } - if (0 != (2 & wa) && NULL == getenv("DirectSubmissionOverrideBlitterSupport")) { + if ((4 & c_dbcsr_acc_opencl_config.wa) && NULL == getenv("DirectSubmissionOverrideBlitterSupport")) { ACC_OPENCL_EXPECT(0 == LIBXSMM_PUTENV(key_value[2])); } } @@ -615,7 +615,16 @@ int c_dbcsr_acc_init(void) { result = EXIT_FAILURE; } if (EXIT_SUCCESS == result) { /* lastly, print active device and list of devices */ - result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, device_id); +# if defined(ACC_OPENCL_ACTIVATE) + if (0 <= ACC_OPENCL_ACTIVATE && ACC_OPENCL_ACTIVATE < c_dbcsr_acc_opencl_config.ndevices) { + result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, ACC_OPENCL_ACTIVATE); + } + else { + result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, device_id); + } +# else + c_dbcsr_acc_opencl_config.device.uid = (cl_uint)device_id; /* hack */ +# endif if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { char platform_name[ACC_OPENCL_BUFFERSIZE]; for (i = 0; i < (cl_uint)c_dbcsr_acc_opencl_config.ndevices; ++i) { @@ -664,14 +673,11 @@ int c_dbcsr_acc_finalize(void) { # endif assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS); if (0 != c_dbcsr_acc_opencl_config.ndevices && NULL != cleanup) { - if (0 != c_dbcsr_acc_opencl_config.verbosity) { - cl_device_id device = NULL; + if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { int d; fprintf(stderr, "INFO ACC/OpenCL: pid=%u nthreads=%i", libxsmm_get_pid(), c_dbcsr_acc_opencl_config.nthreads); if (NULL != c_dbcsr_acc_opencl_config.device.context && - EXIT_SUCCESS == - clGetContextInfo(c_dbcsr_acc_opencl_config.device.context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &device, NULL) && - EXIT_SUCCESS == c_dbcsr_acc_opencl_device_id(device, NULL /*devid*/, &d)) + EXIT_SUCCESS == c_dbcsr_acc_opencl_device_id(c_dbcsr_acc_opencl_config.device.id, NULL /*devid*/, &d)) { fprintf(stderr, " device=%i", d); } @@ -969,24 +975,29 @@ int c_dbcsr_acc_opencl_create_context(cl_device_id active_id, cl_context* contex int c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_id) { + /* accessing devices is thread-safe (array is fixed after initialization) */ + const cl_device_id active_id = + ((0 <= device_id && device_id < c_dbcsr_acc_opencl_config.ndevices) ? c_dbcsr_acc_opencl_config.devices[device_id] : NULL); int result = EXIT_SUCCESS; - cl_device_id active_id = NULL, context_id = NULL; assert(c_dbcsr_acc_opencl_config.ndevices < ACC_OPENCL_MAXNDEVS); - assert(0 <= device_id && device_id < c_dbcsr_acc_opencl_config.ndevices); - /* accessing devices is thread-safe (array is fixed after initialization) */ - active_id = c_dbcsr_acc_opencl_config.devices[device_id]; if (NULL != active_id) { + cl_device_id context_id = NULL; cl_context context = NULL; if (NULL != lock) ACC_OPENCL_ACQUIRE(lock); context = c_dbcsr_acc_opencl_config.device.context; + context_id = c_dbcsr_acc_opencl_config.device.id; if (NULL != context) { - result = clGetContextInfo(context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &context_id, NULL); - if (EXIT_SUCCESS == result && active_id != context_id) { - assert(NULL != context_id); + assert(NULL != context_id); + if (active_id != context_id) { +# if defined(CL_VERSION_1_2) + ACC_OPENCL_EXPECT(EXIT_SUCCESS == clReleaseDevice(context_id)); +# endif result = clReleaseContext(context); + context_id = NULL; context = NULL; } } + assert(NULL == context_id || active_id == context_id); if (EXIT_SUCCESS == result && active_id != context_id) { result = c_dbcsr_acc_opencl_create_context(active_id, &context); assert(NULL != context || EXIT_SUCCESS != result); @@ -1001,6 +1012,8 @@ int c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_i &c_dbcsr_acc_opencl_config.device.type); if (EXIT_SUCCESS == result) { char devname[ACC_OPENCL_BUFFERSIZE] = ""; + const char* const sgexts[] = {"cl_intel_required_subgroup_size", "cl_intel_subgroups", "cl_khr_subgroups"}; + size_t sgsizes[16], nbytes = 0, sgmin = (size_t)-1, i; # if defined(ACC_OPENCL_CMDAGR) ACC_OPENCL_STREAM_PROPERTIES_TYPE properties[4] = { CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, 0 /* terminator */ @@ -1037,6 +1050,34 @@ int c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_i { c_dbcsr_acc_opencl_config.device.unified = CL_FALSE; } + if (EXIT_SUCCESS != clGetDeviceInfo(active_id, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), + c_dbcsr_acc_opencl_config.device.wgsize, NULL)) + { + c_dbcsr_acc_opencl_config.device.wgsize[0] = 1; + } + if (EXIT_SUCCESS != clGetDeviceInfo(active_id, 4199 /*CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE*/, sizeof(size_t), + c_dbcsr_acc_opencl_config.device.wgsize + 1, NULL)) /* CL_VERSION_3_0 */ + { + c_dbcsr_acc_opencl_config.device.wgsize[1] = 1; + } + assert(0 == c_dbcsr_acc_opencl_config.device.wgsize[2]); + if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(active_id, sgexts, 2) && + EXIT_SUCCESS == + clGetDeviceInfo(active_id, 0x4108 /*CL_DEVICE_SUB_GROUP_SIZES_INTEL*/, sizeof(sgsizes), sgsizes, &nbytes)) + { + for (i = 0; (i * sizeof(size_t)) < nbytes; ++i) { + const size_t sgsize = sgsizes[i]; + if (sgsize < sgmin) sgmin = sgsize; + if (0 == (sgsize % c_dbcsr_acc_opencl_config.device.wgsize[1]) && c_dbcsr_acc_opencl_config.device.wgsize[2] < sgsize) { + if (c_dbcsr_acc_opencl_config.device.wgsize[1] < sgsize) c_dbcsr_acc_opencl_config.device.wgsize[1] = sgsize; + c_dbcsr_acc_opencl_config.device.wgsize[2] = sgsize; + } + } + if (0 != c_dbcsr_acc_opencl_config.device.wgsize[2]) c_dbcsr_acc_opencl_config.device.wgsize[2] = sgmin; + } + else { + c_dbcsr_acc_opencl_config.device.wgsize[2] = 0; + } # if defined(ACC_OPENCL_MEM_DEVPTR) if (0 != (4 & c_dbcsr_acc_opencl_config.xhints) && 2 <= *c_dbcsr_acc_opencl_config.device.std_level && 0 != c_dbcsr_acc_opencl_config.device.intel && 0 == c_dbcsr_acc_opencl_config.device.unified && @@ -1076,7 +1117,12 @@ int c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_i c_dbcsr_acc_opencl_config.device.stream.queue = ACC_OPENCL_CREATE_COMMAND_QUEUE(context, active_id, properties, &result); } if (EXIT_SUCCESS == result) { - if (active_id != context_id) c_dbcsr_acc_opencl_config.device.context = context; + if (active_id != context_id) { + assert(active_id != c_dbcsr_acc_opencl_config.device.id); + c_dbcsr_acc_opencl_config.device.context = context; + c_dbcsr_acc_opencl_config.device.id = active_id; + } + assert(active_id == c_dbcsr_acc_opencl_config.device.id); } else memset(&c_dbcsr_acc_opencl_config.device, 0, sizeof(c_dbcsr_acc_opencl_config.device)); } @@ -1117,71 +1163,37 @@ int c_dbcsr_acc_set_active_device(int device_id) { } -int c_dbcsr_acc_opencl_wgsize(cl_device_id device, cl_kernel kernel, size_t* max_value, size_t* preferred_multiple) { - int result = (NULL != device && (NULL != preferred_multiple || NULL != max_value)) ? EXIT_SUCCESS : EXIT_FAILURE; - if (NULL != kernel) { /* kernel-specific */ - if (NULL != max_value) { - ACC_OPENCL_CHECK(clGetKernelWorkGroupInfo(kernel, device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), max_value, NULL), - "query maximum WG-size of kernel", result); - } - if (NULL != preferred_multiple) { - ACC_OPENCL_CHECK(clGetKernelWorkGroupInfo( - kernel, device, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), preferred_multiple, NULL), - "query preferred multiple of WG-size of kernel", result); - } - } - else { /* device-specific */ - if (NULL != max_value) { - ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), max_value, NULL), - "query maximum WG-size of device", result); - } - if (NULL != preferred_multiple) { -# if defined(CL_VERSION_3_0) - ACC_OPENCL_CHECK( - clGetDeviceInfo(device, CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, sizeof(size_t), preferred_multiple, NULL), - "query preferred multiple of WG-size of device", result); -# else - *preferred_multiple = 1; -# endif - } - } - return result; -} - - int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, c_dbcsr_acc_opencl_atomic_fp_t kind, - const char* exts[], int exts_maxlen, char flags[], size_t flags_maxlen) { - cl_device_id device_id = NULL; - int result = 0, ext1, ext2; - for (ext1 = 0; ext1 < exts_maxlen; ++ext1) { + const char* exts[], size_t* exts_maxlen, char flags[], size_t flags_maxlen) { + size_t ext1, ext2; + int result = 0; + for (ext1 = 0; ext1 < (NULL != exts_maxlen ? *exts_maxlen : 0); ++ext1) { if (NULL == exts[ext1] || '\0' == *exts[ext1]) break; } - for (ext2 = ext1 + 1; ext2 < exts_maxlen; ++ext2) { + for (ext2 = ext1 + 1; ext2 < (NULL != exts_maxlen ? *exts_maxlen : 0); ++ext2) { if (NULL == exts[ext2] || '\0' == *exts[ext2]) break; } - if (NULL != devinfo && ext2 < exts_maxlen && - EXIT_SUCCESS == clGetContextInfo(devinfo->context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &device_id, NULL)) - { + if (NULL != devinfo && NULL != exts_maxlen && ext2 < *exts_maxlen) { const char* atomic_type = ""; switch (kind) { case c_dbcsr_acc_opencl_atomic_fp_64: { exts[ext1] = "cl_khr_fp64 cl_khr_int64_base_atomics cl_khr_int64_extended_atomics"; - if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { + if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(devinfo->id, exts, ext2)) { atomic_type = "-DTA=long -DTA2=atomic_long -DTF=atomic_double"; } else { exts[ext1] = "cl_khr_fp64 cl_khr_int64_base_atomics"; - if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { + if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(devinfo->id, exts, ext2)) { atomic_type = "-DTA=long"; } else { /* fallback */ exts[ext1] = "cl_khr_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics"; - if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { + if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(devinfo->id, exts, ext2)) { atomic_type = "-DATOMIC32_ADD64 -DTA=int -DTA2=atomic_int -DTF=atomic_double"; } else { exts[ext1] = "cl_khr_fp64 cl_khr_global_int32_base_atomics"; - if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { + if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(devinfo->id, exts, ext2)) { atomic_type = "-DATOMIC32_ADD64 -DTA=int"; } else kind = c_dbcsr_acc_opencl_atomic_fp_no; @@ -1191,13 +1203,13 @@ int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, } break; case c_dbcsr_acc_opencl_atomic_fp_32: { exts[ext1] = "cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics"; - if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { + if (2 <= *devinfo->std_level && EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(devinfo->id, exts, ext2)) { exts[ext2] = "cl_khr_int64_base_atomics cl_khr_int64_extended_atomics"; atomic_type = "-DTA=int -DTA2=atomic_int -DTF=atomic_float"; } else { exts[ext1] = "cl_khr_global_int32_base_atomics"; - if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(device_id, exts, ext2)) { + if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(devinfo->id, exts, ext2)) { exts[ext2] = "cl_khr_int64_base_atomics"; atomic_type = "-DTA=int"; } @@ -1222,13 +1234,14 @@ int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, const int force_atomics = ((NULL == env_atomics || '\0' == *env_atomics) ? 0 : atoi(env_atomics)); if (NULL == env_atomics || '\0' == *env_atomics || 0 != force_atomics) { cl_bitfield fp_atomics = 0; - if (EXIT_SUCCESS == clGetDeviceInfo(device_id, + if (EXIT_SUCCESS == clGetDeviceInfo(devinfo->id, (cl_device_info)(c_dbcsr_acc_opencl_atomic_fp_64 == kind ? 0x4232 : 0x4231), sizeof(cl_bitfield), &fp_atomics, NULL) && 0 != (/*add*/ (1 << 1) & fp_atomics)) { -# if 0 /* enabling this permitted extension in source code causes compiler warning */ exts[ext2] = "cl_ext_float_atomics"; +# if 1 /* enabling this permitted extension in source code causes compiler warning */ + *exts_maxlen = ext2; /* quietly report extension by reducing exts_maxlen */ # endif atomic_exp = (c_dbcsr_acc_opencl_atomic_fp_64 == kind ? "atomic_fetch_add_explicit((GLOBAL_VOLATILE(atomic_double)*)A,B," @@ -1290,7 +1303,7 @@ int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, } assert(NULL != atomic_exp); /* compose build parameters and flags */ - result = LIBXSMM_SNPRINTF(flags, flags_maxlen, "-DTAN=%i %s %s -D\"ATOMIC_ADD_GLOBAL(A,B)=%s\" %s", kind, atomic_type, + result = LIBXSMM_SNPRINTF(flags, flags_maxlen, " -DTAN=%i %s %s -D\"ATOMIC_ADD_GLOBAL(A,B)=%s\" %s", kind, atomic_type, atomic_ops, atomic_exp, barrier_expr); } } @@ -1301,6 +1314,7 @@ int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, int c_dbcsr_acc_opencl_flags( const char build_params[], const char build_options[], const char try_build_options[], char buffer[], size_t buffer_size) { int result = EXIT_SUCCESS; + assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (NULL != buffer) { const int std_clevel = 100 * c_dbcsr_acc_opencl_config.device.std_clevel[0] + 10 * c_dbcsr_acc_opencl_config.device.std_clevel[1]; @@ -1323,18 +1337,15 @@ int c_dbcsr_acc_opencl_flags( int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const char kernel_name[], const char build_params[], - const char build_options[], const char try_build_options[], int* try_ok, const char* const extnames[], int num_exts, + const char build_options[], const char try_build_options[], int* try_ok, const char* const extnames[], size_t num_exts, cl_kernel* kernel) { char buffer[ACC_OPENCL_BUFFERSIZE] = "", buffer_name[ACC_OPENCL_MAXSTRLEN * 2]; int ok = EXIT_SUCCESS, source_is_cl = 1, nchar; - cl_device_id active_id = NULL; - int result = ((NULL != source && NULL != kernel_name && '\0' != *kernel_name) - ? clGetContextInfo( - c_dbcsr_acc_opencl_config.device.context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &active_id, NULL) - : EXIT_FAILURE); + int result = ((NULL != source && NULL != kernel_name && '\0' != *kernel_name) ? EXIT_SUCCESS : EXIT_FAILURE); cl_program program = NULL; FILE* file_src = NULL; size_t size_src = 0; + assert(NULL != c_dbcsr_acc_opencl_config.device.context); assert(NULL != kernel); *kernel = NULL; if (EXIT_SUCCESS == result && 0 != source_is_file) file_src = fopen(source, "rb"); @@ -1406,7 +1417,7 @@ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const cha else break; } # if !defined(NDEBUG) - if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(active_id, (const char* const*)&ext, 1)) + if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(c_dbcsr_acc_opencl_config.device.id, (const char* const*)&ext, 1)) # endif { /* NDEBUG: assume given extension is supported (confirmed upfront) */ if (NULL == line) { /* extension is not already part of source */ @@ -1430,79 +1441,89 @@ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const cha } buffer[0] = '\0'; /* reset to empty */ } - /* consider preprocessing kernel for analysis (cpp); failure does not matter (result) */ -# if defined(ACC_OPENCL_CPPBIN) + /* cpp: consider to preprocess kernel (failure does not impact result code) */ if (0 != c_dbcsr_acc_opencl_config.dump && NULL == file_src) { - nchar = LIBXSMM_SNPRINTF(buffer_name, sizeof(buffer_name), ACC_OPENCL_TEMPDIR "/.%s.XXXXXX", kernel_name); - if (0 < nchar && (int)sizeof(buffer_name) > nchar) { - FILE* const file_cpp = fopen(ACC_OPENCL_CPPBIN, "rb"); - const char* sed_pattern = ""; -# if defined(ACC_OPENCL_SEDBIN) - FILE* const file_sed = fopen(ACC_OPENCL_SEDBIN, "rb"); - if (NULL != file_sed) { - sed_pattern = "| " ACC_OPENCL_SEDBIN " '/^[[:space:]]*\\(\\/\\/.*\\)*$/d'"; - fclose(file_sed); /* existence-check */ - } -# endif + char dump_filename[ACC_OPENCL_MAXSTRLEN]; + nchar = LIBXSMM_SNPRINTF(dump_filename, sizeof(dump_filename), "%s.cl", kernel_name); + if (0 < nchar && (int)sizeof(dump_filename) > nchar) { + const int std_flag_len = (int)strlen(c_dbcsr_acc_opencl_config.device.std_flag); + const char* const env_cpp = getenv("ACC_OPENCL_CPP"); + const int cpp = (NULL == env_cpp ? 1 /*default*/ : atoi(env_cpp)); +# if defined(ACC_OPENCL_CPPBIN) + FILE* const file_cpp = (0 != cpp ? fopen(ACC_OPENCL_CPPBIN, "rb") : NULL); +# else + FILE* const file_cpp = NULL; +# endif + int file_dmp = -1; if (NULL != file_cpp) { - const int file_tmp = mkstemp(buffer_name); + nchar = LIBXSMM_SNPRINTF(buffer_name, sizeof(buffer_name), ACC_OPENCL_TEMPDIR "/.%s.XXXXXX", kernel_name); + if (0 < nchar && (int)sizeof(buffer_name) > nchar) file_dmp = mkstemp(buffer_name); fclose(file_cpp); /* existence-check */ - if (0 <= file_tmp) { - const int std_clevel = 100 * c_dbcsr_acc_opencl_config.device.std_clevel[0] + - 10 * c_dbcsr_acc_opencl_config.device.std_clevel[1]; - const int std_level = 100 * c_dbcsr_acc_opencl_config.device.std_level[0] + - 10 * c_dbcsr_acc_opencl_config.device.std_level[1]; - const int std_flag_len = (int)strlen(c_dbcsr_acc_opencl_config.device.std_flag); - nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), - ACC_OPENCL_CPPBIN " -P -C -nostdinc -DACC_OPENCL_VERSION=%u -DACC_OPENCL_C_VERSION=%u %s %s %s %s >%s.cl", std_level, - std_clevel, 0 == c_dbcsr_acc_opencl_config.device.nv ? "" : "-D__NV_CL_C_VERSION", - NULL != build_params ? build_params : "", buffer_name, sed_pattern, kernel_name); - if (0 < nchar && (int)sizeof(buffer) > nchar && - (0 == std_flag_len || (3 == write(file_tmp, "/*\n", 3) && - std_flag_len == write(file_tmp, c_dbcsr_acc_opencl_config.device.std_flag, std_flag_len) && - 4 == write(file_tmp, "\n*/\n", 4))) && - size_src == (size_t)write(file_tmp, ext_source, size_src)) - { - if (EXIT_SUCCESS == system(buffer)) { - nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s.cl", kernel_name); - if (0 < nchar && (int)sizeof(buffer) > nchar) { - FILE* const file = fopen(buffer, "r"); - if (NULL != file) { - const long int size = (EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_END) ? ftell(file) : 0); - char* const src = (char*)(EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_SET) - ? libxsmm_aligned_scratch(size + 1 /*terminator*/, 0 /*auto-align*/) - : NULL); - if (NULL != src) { - if ((size_t)size == fread(src, 1 /*sizeof(char)*/, size /*count*/, file)) { - if (source != ext_source) { - void* p = NULL; - LIBXSMM_ASSIGN127(&p, &ext_source); - libxsmm_free(p); - } - src[size] = '\0'; - ext_source = src; - } - else libxsmm_free(src); - } - ACC_OPENCL_EXPECT(EXIT_SUCCESS == fclose(file)); + } + else file_dmp = open(dump_filename, O_CREAT | O_TRUNC | O_RDWR, S_IREAD | S_IWRITE); + if (0 <= file_dmp) { + if ((0 != std_flag_len && (3 != write(file_dmp, "/*\n", 3) || + std_flag_len != write(file_dmp, c_dbcsr_acc_opencl_config.device.std_flag, std_flag_len) || + 4 != write(file_dmp, "\n*/\n", 4))) || + size_src != (size_t)write(file_dmp, ext_source, size_src)) + { + file_dmp = -1; + } + ACC_OPENCL_EXPECT(EXIT_SUCCESS == close(file_dmp)); + } +# if defined(ACC_OPENCL_CPPBIN) + if (NULL != file_cpp && 0 <= file_dmp) { /* preprocess source-code */ + const int std_clevel = 100 * c_dbcsr_acc_opencl_config.device.std_clevel[0] + + 10 * c_dbcsr_acc_opencl_config.device.std_clevel[1]; + const int std_level = 100 * c_dbcsr_acc_opencl_config.device.std_level[0] + + 10 * c_dbcsr_acc_opencl_config.device.std_level[1]; + const char* sed_pattern = ""; +# if defined(ACC_OPENCL_SEDBIN) + FILE* const file_sed = fopen(ACC_OPENCL_SEDBIN, "rb"); + if (NULL != file_sed) { + sed_pattern = "| " ACC_OPENCL_SEDBIN " '/^[[:space:]]*\\(\\/\\/.*\\)*$/d'"; + fclose(file_sed); /* existence-check */ + } +# endif + nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), + ACC_OPENCL_CPPBIN " -P -C -nostdinc -DACC_OPENCL_VERSION=%u -DACC_OPENCL_C_VERSION=%u %s %s %s %s >%s", std_level, + std_clevel, 0 == c_dbcsr_acc_opencl_config.device.nv ? "" : "-D__NV_CL_C_VERSION", + NULL != build_params ? build_params : "", buffer_name, sed_pattern, dump_filename); + if (0 < nchar && (int)sizeof(buffer) > nchar && EXIT_SUCCESS == system(buffer)) { + FILE* const file = fopen(dump_filename, "r"); + if (NULL != file) { + const long int size = (EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_END) ? ftell(file) : 0); + char* const src = (char*)(EXIT_SUCCESS == fseek(file, 0 /*offset*/, SEEK_SET) + ? libxsmm_aligned_scratch(size + 1 /*terminator*/, 0 /*auto-align*/) + : NULL); + if (NULL != src) { + if ((size_t)size == fread(src, 1 /*sizeof(char)*/, size /*count*/, file)) { + if (source != ext_source) { + void* p = NULL; + LIBXSMM_ASSIGN127(&p, &ext_source); + libxsmm_free(p); } + src[size] = '\0'; + ext_source = src; } + else libxsmm_free(src); } + ACC_OPENCL_EXPECT(EXIT_SUCCESS == fclose(file)); } - buffer[0] = '\0'; /* reset to empty */ - ACC_OPENCL_EXPECT(EXIT_SUCCESS == unlink(buffer_name)); - ACC_OPENCL_EXPECT(EXIT_SUCCESS == close(file_tmp)); } + ACC_OPENCL_EXPECT(EXIT_SUCCESS == unlink(buffer_name)); /* remove temporary file */ + buffer[0] = '\0'; /* reset to empty */ } +# endif } } -# endif program = clCreateProgramWithSource(c_dbcsr_acc_opencl_config.device.context, 1 /*nlines*/, &ext_source, NULL, &result); if (EXIT_SUCCESS == result) { assert(NULL != program); result = c_dbcsr_acc_opencl_flags(build_params, build_options, try_build_options, buffer, sizeof(buffer)); if (EXIT_SUCCESS == result) { - result = clBuildProgram(program, 1 /*num_devices*/, &active_id, buffer, NULL /*callback*/, NULL /*user_data*/); + result = clBuildProgram( + program, 1 /*num_devices*/, &c_dbcsr_acc_opencl_config.device.id, buffer, NULL /*callback*/, NULL /*user_data*/); } if (EXIT_SUCCESS != result && NULL != try_build_options && '\0' != *try_build_options) { result = c_dbcsr_acc_opencl_flags(build_params, build_options, NULL /*try_build_options*/, buffer, sizeof(buffer)); @@ -1511,7 +1532,8 @@ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const cha program = clCreateProgramWithSource(c_dbcsr_acc_opencl_config.device.context, 1 /*nlines*/, &ext_source, NULL, &result); assert(EXIT_SUCCESS != result || NULL != program); if (EXIT_SUCCESS == result) { - result = clBuildProgram(program, 1 /*num_devices*/, &active_id, buffer, NULL /*callback*/, NULL /*user_data*/); + result = clBuildProgram( + program, 1 /*num_devices*/, &c_dbcsr_acc_opencl_config.device.id, buffer, NULL /*callback*/, NULL /*user_data*/); } } ok = EXIT_FAILURE; @@ -1566,14 +1588,15 @@ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const cha else # endif { - program = clCreateProgramWithBinary(c_dbcsr_acc_opencl_config.device.context, 1, &active_id, &size_src, - (const unsigned char**)&source, NULL /*binary_status*/, &result); + program = clCreateProgramWithBinary(c_dbcsr_acc_opencl_config.device.context, 1, &c_dbcsr_acc_opencl_config.device.id, + &size_src, (const unsigned char**)&source, NULL /*binary_status*/, &result); } if (EXIT_SUCCESS == result) { assert(NULL != program); result = c_dbcsr_acc_opencl_flags(build_params, build_options, try_build_options, buffer, sizeof(buffer)); if (EXIT_SUCCESS == result) { - result = clBuildProgram(program, 1 /*num_devices*/, &active_id, buffer, NULL /*callback*/, NULL /*user_data*/); + result = clBuildProgram( + program, 1 /*num_devices*/, &c_dbcsr_acc_opencl_config.device.id, buffer, NULL /*callback*/, NULL /*user_data*/); } if (EXIT_SUCCESS != result && NULL != try_build_options && '\0' != *try_build_options) { result = c_dbcsr_acc_opencl_flags(build_params, build_options, NULL /*try_build_options*/, buffer, sizeof(buffer)); @@ -1585,12 +1608,13 @@ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const cha else # endif { - program = clCreateProgramWithBinary(c_dbcsr_acc_opencl_config.device.context, 1, &active_id, &size_src, - (const unsigned char**)&source, NULL /*binary_status*/, &result); + program = clCreateProgramWithBinary(c_dbcsr_acc_opencl_config.device.context, 1, &c_dbcsr_acc_opencl_config.device.id, + &size_src, (const unsigned char**)&source, NULL /*binary_status*/, &result); } assert(EXIT_SUCCESS != result || NULL != program); if (EXIT_SUCCESS == result) { - result = clBuildProgram(program, 1 /*num_devices*/, &active_id, buffer, NULL /*callback*/, NULL /*user_data*/); + result = clBuildProgram( + program, 1 /*num_devices*/, &c_dbcsr_acc_opencl_config.device.id, buffer, NULL /*callback*/, NULL /*user_data*/); } } ok = EXIT_FAILURE; @@ -1622,7 +1646,9 @@ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const cha *kernel = NULL; } if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { - if (EXIT_SUCCESS == clGetProgramBuildInfo(program, active_id, CL_PROGRAM_BUILD_LOG, ACC_OPENCL_BUFFERSIZE, buffer, NULL)) { + if (EXIT_SUCCESS == clGetProgramBuildInfo(program, c_dbcsr_acc_opencl_config.device.id, CL_PROGRAM_BUILD_LOG, + ACC_OPENCL_BUFFERSIZE, buffer, NULL)) + { const char* info = buffer; while ('\0' != *info && NULL != strchr("\n\r\t ", *info)) ++info; /* remove preceding newline etc. */ assert(NULL != kernel_name && '\0' != *kernel_name); @@ -1638,6 +1664,7 @@ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const cha int c_dbcsr_acc_opencl_set_kernel_ptr(cl_kernel kernel, cl_uint arg_index, const void* arg_value) { + assert(NULL != c_dbcsr_acc_opencl_config.device.context); return (NULL != c_dbcsr_acc_opencl_config.device.clSetKernelArgMemPointerINTEL ? c_dbcsr_acc_opencl_config.device.clSetKernelArgMemPointerINTEL(kernel, arg_index, arg_value) : clSetKernelArg(kernel, arg_index, sizeof(cl_mem), &arg_value)); diff --git a/src/acc/opencl/acc_opencl.h b/src/acc/opencl/acc_opencl.h index 8cdbc15f2df..cd6639983fd 100644 --- a/src/acc/opencl/acc_opencl.h +++ b/src/acc/opencl/acc_opencl.h @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef ACC_OPENCL_H #define ACC_OPENCL_H @@ -116,6 +116,10 @@ #if !defined(ACC_OPENCL_OMPLOCKS) && 1 # define ACC_OPENCL_OMPLOCKS #endif +/* Activate device by default */ +#if !defined(ACC_OPENCL_ACTIVATE) && 0 +# define ACC_OPENCL_ACTIVATE 0 +#endif /* Use DBCSR's profile for detailed timings */ #if !defined(ACC_OPENCL_PROFILE) && 0 # define ACC_OPENCL_PROFILE @@ -260,13 +264,21 @@ typedef struct c_dbcsr_acc_opencl_device_t { c_dbcsr_acc_opencl_stream_t stream; /** OpenCL compiler flag (language standard). */ char std_flag[16]; - /** OpenCL support-level of device. */ + /** OpenCL support-level (major and minor). */ cl_int std_level[2], std_clevel[2]; + /** + * Maximum size of workgroup (WG), preferred multiple of WG-size (PM), + * and size of subgoup (SG) only if larger-equal than PM. SG is signaled + * smaller if an alternative SG-size exists (SG is zero if no support). + */ + size_t wgsize[3]; /** Kind of device (GPU, CPU, or other). */ cl_device_type type; + /** OpenCL device-ID. */ + cl_device_id id; /** Whether host memory is unified. */ cl_int unified; - /** Device-ID. */ + /** Device-UID. */ cl_uint uid; /** Main vendor? */ cl_int intel, amd, nv; @@ -339,6 +351,8 @@ typedef struct c_dbcsr_acc_opencl_config_t { cl_int debug; /** Dump level. */ cl_int dump; + /** WA level */ + cl_int wa; } c_dbcsr_acc_opencl_config_t; /** Global configuration setup in c_dbcsr_acc_init. */ @@ -381,21 +395,19 @@ int c_dbcsr_acc_opencl_device_ext(cl_device_id device, const char* const extname int c_dbcsr_acc_opencl_create_context(cl_device_id device_id, cl_context* context); /** Internal variant of c_dbcsr_acc_set_active_device. */ int c_dbcsr_acc_opencl_set_active_device(ACC_OPENCL_LOCKTYPE* lock, int device_id); -/** Get preferred multiple and max. size of workgroup (kernel- or device-specific). */ -int c_dbcsr_acc_opencl_wgsize(cl_device_id device, cl_kernel kernel, size_t* max_value, size_t* preferred_multiple); /** * Build kernel from source with given kernel_name, build_params and build_options. * The build_params are meant to instantiate the kernel (-D) whereas build_options * are are meant to be compiler-flags. */ int c_dbcsr_acc_opencl_kernel(int source_is_file, const char source[], const char kernel_name[], const char build_params[], - const char build_options[], const char try_build_options[], int* try_ok, const char* const extnames[], int num_exts, + const char build_options[], const char try_build_options[], int* try_ok, const char* const extnames[], size_t num_exts, cl_kernel* kernel); /** Per-thread variant of c_dbcsr_acc_device_synchronize. */ int c_dbcsr_acc_opencl_device_synchronize(ACC_OPENCL_LOCKTYPE* lock, int thread_id); /** Assemble flags to support atomic operations. */ int c_dbcsr_acc_opencl_flags_atomics(const c_dbcsr_acc_opencl_device_t* devinfo, c_dbcsr_acc_opencl_atomic_fp_t kind, - const char* exts[], int exts_maxlen, char flags[], size_t flags_maxlen); + const char* exts[], size_t* exts_maxlen, char flags[], size_t flags_maxlen); /** Combines build-params and build-options, optional flags (try_build_options). */ int c_dbcsr_acc_opencl_flags( const char build_params[], const char build_options[], const char try_build_options[], char buffer[], size_t buffer_size); diff --git a/src/acc/opencl/acc_opencl.sh b/src/acc/opencl/acc_opencl.sh index e7dda72ec15..27016902432 100755 --- a/src/acc/opencl/acc_opencl.sh +++ b/src/acc/opencl/acc_opencl.sh @@ -14,6 +14,7 @@ DIRNAME=$(command -v dirname) HEAD=$(command -v head) SORT=$(command -v sort) SED=$(command -v gsed) +CAT=$(command -v cat) CPP=$(command -v cpp) TR=$(command -v tr) RM=$(command -v rm) @@ -35,18 +36,30 @@ trap_exit() { } process_pre() { - if [ "${CPP}" ] && \ - [ "$(eval "${CPP} ${CPPBASEFLAGS} $1" 2>/dev/null >/dev/null && echo "YES")" ]; - then - if [ "${CPPFLAGS}" ] && \ - [ "$(eval "${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1" 2>/dev/null >/dev/null && echo "YES")" ]; + if [ "$1" ]; then + if [ "${CPP}" ] && \ + [ "$(eval "${CPP} ${CPPBASEFLAGS} $1" 2>/dev/null >/dev/null && echo "YES")" ]; then - eval "${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1" 2>/dev/null + if [ "${CPPFLAGS}" ] && \ + [ "$(eval "${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1" 2>/dev/null >/dev/null && echo "YES")" ]; + then + eval "${CPP} ${CPPFLAGS} ${CPPBASEFLAGS} $1" 2>/dev/null + else + eval "${CPP} ${CPPBASEFLAGS} $1" 2>/dev/null + fi + else # fallback to sed + ${SED} -r ':a;s%(.*)/\*.*\*/%\1%;ta;/\/\*/!b;N;ba' "$1" + fi | \ + if [ ! "$2" ] || [ "0" = "$2" ]; then # strip include guards + GUARD=$(${BASENAME} "$1" | ${TR} '[:lower:]' '[:upper:]' | ${TR} '.' '_') + if [ "${GUARD}" ] && [ "$(${SED} -n "/${GUARD}/p" "$1")" ]; then + ${SED} "/${GUARD}/d;\${/\s*\#\s*endif/d}" + else + ${CAT} + fi else - eval "${CPP} ${CPPBASEFLAGS} $1" 2>/dev/null + ${CAT} fi - else # fallback to sed - ${SED} -r ':a;s%(.*)/\*.*\*/%\1%;ta;/\/\*/!b;N;ba' "$1" fi } @@ -59,28 +72,32 @@ process() { CLPATH=$(${DIRNAME} "$1") FILE=${CLPATH}/${CLINC} if [ "${FILE}" ] && [ -e "${FILE}" ]; then - process_pre "${FILE}" | process "${FILE}" + process_pre "${FILE}" "$2" | process "${FILE}" "$2" else - >&2 echo "ERROR: header file ${FILE} not found!" - exit 1 + >&2 echo "WARNING: header file ${FILE} not found!" + #exit 1 fi else ${SED} <<<"${LINE}" \ -e '/^[[:space:]]*$/d' -e 's/[[:space:]]*$//' \ - -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/^/ "/' -e 's/$/\\n" \\/' + -e 's/[[:space:]]*\\/ \\\\/g' -e 's/"/\\"/g' \ + -e 's/^/ "/' -e 's/$/\\n" \\/' fi done unset IFS } if [ "${BASENAME}" ] && [ "${DIRNAME}" ] && [ "${HEAD}" ] && [ "${SORT}" ] && \ - [ "${SED}" ] && [ "${TR}" ] && [ "${RM}" ] && [ "${WC}" ]; + [ "${SED}" ] && [ "${CAT}" ] && [ "${TR}" ] && [ "${RM}" ] && [ "${WC}" ]; then for OFILE in "$@"; do :; done while test $# -gt 0; do case "$1" in -h|--help) shift $#;; + -k|--keep) + KEEP=1 + shift;; -b|--banner) BANNER=$2 shift 2;; @@ -119,13 +136,20 @@ then fi fi trap 'trap_exit' EXIT - RNAME=$(${BASENAME} "$(${DIRNAME} "$1")") + RNAME=$(${BASENAME} "$(cd "$(${DIRNAME} "$1")" && pwd -P)") ANAME=$(${TR} '[:lower:]' '[:upper:]' <<<"${RNAME}") NFILES_OCL=0 for CLFILE in ${*:1:${#@}-1}; do if [ "${CLFILE##*.}" = "cl" ]; then + CLEXT=".cl" + elif [ "${CLFILE##*.}" = "h" ]; then + CLEXT=".h" + else + CLEXT="" + fi + if [ "${CLEXT}" ]; then if [ -e "${CLFILE}" ]; then - CNAME=$(${BASENAME} "${CLFILE}" .cl | ${SED} "s/${RNAME}_//") + CNAME=$(${BASENAME} "${CLFILE}" "${CLEXT}" | ${SED} "s/${RNAME}_//;s/_opencl//") BNAME=$(${TR} '[:lower:]' '[:upper:]' <<<"${CNAME}") SNAME=OPENCL_${ANAME}_STRING_${BNAME} VNAME=opencl_${RNAME}_source_${CNAME} @@ -137,7 +161,7 @@ then fi echo "#define ${MNAME} ${VNAME}" echo "#define ${SNAME} \\" - process_pre "${CLFILE}" | process "${CLFILE}" + process_pre "${CLFILE}" "${KEEP}" | process "${CLFILE}" "${KEEP}" echo " \"\"" echo "static const char ${VNAME}[] = ${SNAME};" NFILES_OCL=$((NFILES_OCL+1)) @@ -227,6 +251,7 @@ then else echo "Usage: $0 infile.cl [infile2.cl .. infileN.cl] [infile.csv [.. infileN.csv]] outfile.h" echo " At least one OpenCL file and one header file must be supplied." + echo " -k|--keep: do not strip include guards (stripped even if necessary)" echo " -b|--banner N: number of lines used as banner (default: 0)" echo " -p|--params P: directory-path to CSV-files (can be \"\")" echo " default: ${PARAMDIR}" diff --git a/src/acc/opencl/acc_opencl_event.c b/src/acc/opencl/acc_opencl_event.c index 7fde985a04e..34b0782f05d 100644 --- a/src/acc/opencl/acc_opencl_event.c +++ b/src/acc/opencl/acc_opencl_event.c @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" diff --git a/src/acc/opencl/acc_opencl_mem.c b/src/acc/opencl/acc_opencl_mem.c index 5ea4846ad86..41fc76519c0 100644 --- a/src/acc/opencl/acc_opencl_mem.c +++ b/src/acc/opencl/acc_opencl_mem.c @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" @@ -73,6 +73,7 @@ c_dbcsr_acc_opencl_info_memptr_t* c_dbcsr_acc_opencl_info_devptr_modify( assert(0 < elsize); if (NULL != memory) { # if defined(ACC_OPENCL_MEM_DEVPTR) + assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (NULL == c_dbcsr_acc_opencl_config.device.clSetKernelArgMemPointerINTEL) { const char* const pointer = (const char*)memory; const size_t n = ACC_OPENCL_MAXNITEMS * c_dbcsr_acc_opencl_config.nthreads; @@ -140,6 +141,7 @@ int c_dbcsr_acc_opencl_info_devptr_lock(c_dbcsr_acc_opencl_info_memptr_t* info, devptr = c_dbcsr_acc_opencl_info_devptr_modify(lock, non_const, elsize, amount, offset); if (NULL != devptr) { # if defined(ACC_OPENCL_MEM_DEVPTR) + assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (NULL == c_dbcsr_acc_opencl_config.device.clSetKernelArgMemPointerINTEL) { LIBXSMM_ASSIGN127(info, devptr); } @@ -178,6 +180,12 @@ int c_dbcsr_acc_host_mem_allocate(void** host_mem, size_t nbytes, void* stream) } nbytes += alignment + size_meminfo - 1; assert(NULL != host_mem); +# if !defined(ACC_OPENCL_ACTIVATE) + if (NULL == c_dbcsr_acc_opencl_config.device.context) { + ACC_OPENCL_EXPECT( + EXIT_SUCCESS == c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, (int)c_dbcsr_acc_opencl_config.device.uid)); + } +# endif memory = clCreateBuffer(c_dbcsr_acc_opencl_config.device.context, CL_MEM_ALLOC_HOST_PTR, nbytes, NULL /*host_ptr*/, &result); if (EXIT_SUCCESS == result) { const c_dbcsr_acc_opencl_stream_t* const str = (NULL != stream ? ACC_OPENCL_STREAM(stream) @@ -289,7 +297,7 @@ int c_dbcsr_acc_opencl_memcpy_d2h( int c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t nbytes) { int result = EXIT_SUCCESS; /* assume no lock is needed to protect against context/device changes */ - const cl_context context = c_dbcsr_acc_opencl_config.device.context; + cl_context context = c_dbcsr_acc_opencl_config.device.context; cl_mem memory = NULL; void* memptr = NULL; # if defined(__DBCSR_ACC) && defined(ACC_OPENCL_PROFILE) @@ -297,16 +305,19 @@ int c_dbcsr_acc_dev_mem_allocate(void** dev_mem, size_t nbytes) { static const char* const routine_name_ptr = LIBXSMM_FUNCNAME; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - 1; c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); +# endif +# if !defined(ACC_OPENCL_ACTIVATE) + if (NULL == context) { + ACC_OPENCL_EXPECT( + EXIT_SUCCESS == c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, (int)c_dbcsr_acc_opencl_config.device.uid)); + context = c_dbcsr_acc_opencl_config.device.context; + } # endif assert(NULL != dev_mem && NULL != context); # if defined(ACC_OPENCL_MEM_DEVPTR) if (NULL != c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL) { - cl_device_id device = NULL; - result = clGetContextInfo(context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &device, NULL); - if (EXIT_SUCCESS == result) { - *dev_mem = memptr = c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL( - context, device, NULL /*properties*/, nbytes, 0 /*alignment*/, &result); - } + *dev_mem = memptr = c_dbcsr_acc_opencl_config.device.clDeviceMemAllocINTEL( + context, c_dbcsr_acc_opencl_config.device.id, NULL /*properties*/, nbytes, 0 /*alignment*/, &result); if (EXIT_SUCCESS != result) *dev_mem = NULL; } else @@ -396,13 +407,9 @@ int c_dbcsr_acc_dev_mem_deallocate(void* dev_mem) { # if !defined(ACC_OPENCL_MEM_DEVPTR) memory = (cl_mem)dev_mem; # else + assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (NULL != c_dbcsr_acc_opencl_config.device.clMemFreeINTEL) { - cl_device_id device = NULL; - assert(NULL != c_dbcsr_acc_opencl_config.device.context); - result = clGetContextInfo(c_dbcsr_acc_opencl_config.device.context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &device, NULL); - if (EXIT_SUCCESS == result) { - result = c_dbcsr_acc_opencl_config.device.clMemFreeINTEL(c_dbcsr_acc_opencl_config.device.context, dev_mem); - } + result = c_dbcsr_acc_opencl_config.device.clMemFreeINTEL(c_dbcsr_acc_opencl_config.device.context, dev_mem); } else { c_dbcsr_acc_opencl_info_memptr_t* info = NULL; @@ -467,6 +474,7 @@ int c_dbcsr_acc_memcpy_h2d(const void* host_mem, void* dev_mem, size_t nbytes, v c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); # endif assert((NULL != host_mem && NULL != dev_mem) || 0 == nbytes); + assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (NULL != host_mem && NULL != dev_mem && 0 != nbytes) { const c_dbcsr_acc_opencl_stream_t* const str = (NULL != stream ? ACC_OPENCL_STREAM(stream) : c_dbcsr_acc_opencl_stream(NULL /*lock*/, ACC_OPENCL_OMP_TID())); @@ -556,6 +564,7 @@ int c_dbcsr_acc_memcpy_d2d(const void* devmem_src, void* devmem_dst, size_t nbyt cl_event event = NULL; assert(NULL != str && NULL != str->queue); # if defined(ACC_OPENCL_MEM_DEVPTR) + assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (NULL != c_dbcsr_acc_opencl_config.device.clEnqueueMemcpyINTEL) { result = c_dbcsr_acc_opencl_config.device.clEnqueueMemcpyINTEL( str->queue, CL_FALSE /*blocking*/, devmem_dst, devmem_src, nbytes, 0, NULL, &event); @@ -605,14 +614,10 @@ int c_dbcsr_acc_opencl_memset(void* dev_mem, int value, size_t offset, size_t nb else if (0 == LIBXSMM_MOD2(nbytes, 2)) size_of_value = 2; assert(NULL != str && NULL != str->queue); # if defined(ACC_OPENCL_MEM_DEVPTR) + assert(NULL != c_dbcsr_acc_opencl_config.device.context); if (NULL != c_dbcsr_acc_opencl_config.device.clEnqueueMemFillINTEL) { - cl_device_id device = NULL; - assert(NULL != c_dbcsr_acc_opencl_config.device.context); - result = clGetContextInfo(c_dbcsr_acc_opencl_config.device.context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &device, NULL); - if (EXIT_SUCCESS == result) { - result = c_dbcsr_acc_opencl_config.device.clEnqueueMemFillINTEL( - str->queue, (char*)dev_mem + offset, &value, size_of_value, nbytes, 0, NULL, &event); - } + result = c_dbcsr_acc_opencl_config.device.clEnqueueMemFillINTEL( + str->queue, (char*)dev_mem + offset, &value, size_of_value, nbytes, 0, NULL, &event); } else # endif @@ -649,6 +654,9 @@ int c_dbcsr_acc_memset_zero(void* dev_mem, size_t offset, size_t nbytes, void* s int c_dbcsr_acc_opencl_info_devmem(cl_device_id device, size_t* mem_free, size_t* mem_total, size_t* mem_local, int* mem_unified) { int result = EXIT_SUCCESS, unified = 0; size_t size_free = 0, size_total = 0, size_local = 0; + cl_device_local_mem_type cl_local_type = CL_GLOBAL; + cl_ulong cl_size_total = 0, cl_size_local = 0; + cl_bool cl_unified = CL_FALSE; # if defined(_WIN32) MEMORYSTATUSEX mem_status; mem_status.dwLength = sizeof(mem_status); @@ -688,28 +696,23 @@ int c_dbcsr_acc_opencl_info_devmem(cl_device_id device, size_t* mem_free, size_t size_free = size_page * (size_t)pages_free; } # endif - if (NULL != device) { - cl_device_local_mem_type cl_local_type = CL_GLOBAL; - cl_ulong cl_size_total = 0, cl_size_local = 0; - cl_bool cl_unified = CL_FALSE; - ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_total, NULL), - "retrieve amount of global memory", result); - ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(cl_device_local_mem_type), &cl_local_type, NULL), - "retrieve kind of local memory", result); - if (CL_LOCAL == cl_local_type) { - ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_local, NULL), - "retrieve amount of local memory", result); - } - ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_bool), &cl_unified, NULL), - "retrieve if host memory is unified", result); - if (EXIT_SUCCESS == result) { - if (cl_size_total < size_total) size_total = cl_size_total; - if (size_total < size_free) size_free = size_total; - size_local = cl_size_local; - unified = cl_unified; - } + ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_total, NULL), + "retrieve amount of global memory", result); + ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(cl_device_local_mem_type), &cl_local_type, NULL), + "retrieve kind of local memory", result); + if (CL_LOCAL == cl_local_type) { + ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &cl_size_local, NULL), + "retrieve amount of local memory", result); + } + ACC_OPENCL_CHECK(clGetDeviceInfo(device, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_bool), &cl_unified, NULL), + "retrieve if host memory is unified", result); + if (EXIT_SUCCESS == result) { + if (cl_size_total < size_total) size_total = cl_size_total; + if (size_total < size_free) size_free = size_total; + size_local = cl_size_local; + unified = cl_unified; + assert(size_free <= size_total); } - result = (size_free <= size_total ? EXIT_SUCCESS : EXIT_FAILURE); assert(NULL != mem_local || NULL != mem_total || NULL != mem_free || NULL != mem_unified); if (NULL != mem_unified) *mem_unified = unified; if (NULL != mem_local) *mem_local = size_local; @@ -720,19 +723,16 @@ int c_dbcsr_acc_opencl_info_devmem(cl_device_id device, size_t* mem_free, size_t int c_dbcsr_acc_dev_mem_info(size_t* mem_free, size_t* mem_total) { - cl_device_id device = NULL; - int result = (0 < c_dbcsr_acc_opencl_config.ndevices ? clGetContextInfo(c_dbcsr_acc_opencl_config.device.context, - CL_CONTEXT_DEVICES, sizeof(cl_device_id), &device, NULL) - : EXIT_FAILURE); + int result; # if defined(__DBCSR_ACC) && defined(ACC_OPENCL_PROFILE) int routine_handle; static const char* const routine_name_ptr = LIBXSMM_FUNCNAME; static const int routine_name_len = (int)sizeof(LIBXSMM_FUNCNAME) - 1; c_dbcsr_timeset((const char**)&routine_name_ptr, &routine_name_len, &routine_handle); # endif - if (EXIT_SUCCESS == result) { - result = c_dbcsr_acc_opencl_info_devmem(device, mem_free, mem_total, NULL /*mem_local*/, NULL /*mem_unified*/); - } + assert(0 < c_dbcsr_acc_opencl_config.ndevices || NULL == c_dbcsr_acc_opencl_config.device.id); + result = c_dbcsr_acc_opencl_info_devmem( + c_dbcsr_acc_opencl_config.device.id, mem_free, mem_total, NULL /*mem_local*/, NULL /*mem_unified*/); # if defined(__DBCSR_ACC) && defined(ACC_OPENCL_PROFILE) c_dbcsr_timestop(&routine_handle); # endif diff --git a/src/acc/opencl/acc_opencl_stream.c b/src/acc/opencl/acc_opencl_stream.c index 11d3159473c..adb414a3a66 100644 --- a/src/acc/opencl/acc_opencl_stream.c +++ b/src/acc/opencl/acc_opencl_stream.c @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "acc_opencl.h" @@ -40,6 +40,7 @@ const c_dbcsr_acc_opencl_stream_t* c_dbcsr_acc_opencl_stream(ACC_OPENCL_LOCKTYPE else break; /* error */ } if (NULL == result) { /* fallback */ + assert(NULL != c_dbcsr_acc_opencl_config.device.context); result = (NULL != result_main ? result_main : &c_dbcsr_acc_opencl_config.device.stream); } if (NULL != lock) ACC_OPENCL_RELEASE(lock); @@ -103,44 +104,50 @@ int c_dbcsr_acc_stream_create(void** stream_p, const char* name, int priority) { } else offset = c_dbcsr_acc_opencl_stream_counter_base++; # endif - if (NULL != c_dbcsr_acc_opencl_config.device.context) { - cl_device_id device = NULL; - result = clGetContextInfo(c_dbcsr_acc_opencl_config.device.context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &device, NULL); - if (EXIT_SUCCESS == result) { - if (0 != (2 & c_dbcsr_acc_opencl_config.xhints) && 0 != c_dbcsr_acc_opencl_config.device.intel) { /* enable queue families */ - struct { - cl_command_queue_properties properties; - cl_bitfield capabilities; - cl_uint count; - char name[64 /*CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL*/]; - } intel_qfprops[16]; - size_t nbytes = 0, i; - if (EXIT_SUCCESS == clGetDeviceInfo(device, 0x418B /*CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL*/, sizeof(intel_qfprops), - intel_qfprops, &nbytes)) - { - for (i = 0; (i * sizeof(*intel_qfprops)) < nbytes; ++i) { - if (0 /*CL_QUEUE_DEFAULT_CAPABILITIES_INTEL*/ == intel_qfprops[i].capabilities && 1 < intel_qfprops[i].count) { - const int j = (0 /*terminator*/ == properties[2] ? 2 : 4); - properties[j + 0] = 0x418C; /* CL_QUEUE_FAMILY_INTEL */ - properties[j + 1] = (int)i; - properties[j + 2] = 0x418D; /* CL_QUEUE_INDEX_INTEL */ - properties[j + 3] = (i + offset) % intel_qfprops[i].count; - properties[j + 4] = 0; /* terminator */ - break; - } + if (NULL == c_dbcsr_acc_opencl_config.device.context) +# if defined(ACC_OPENCL_ACTIVATE) + { + result = EXIT_FAILURE; + } + else +# else + { + result = c_dbcsr_acc_opencl_set_active_device(NULL /*lock*/, (int)c_dbcsr_acc_opencl_config.device.uid); + } + if (NULL != c_dbcsr_acc_opencl_config.device.context) +# endif + { + if (0 != (2 & c_dbcsr_acc_opencl_config.xhints) && 0 != c_dbcsr_acc_opencl_config.device.intel) { /* enable queue families */ + struct { + cl_command_queue_properties properties; + cl_bitfield capabilities; + cl_uint count; + char name[64 /*CL_QUEUE_FAMILY_MAX_NAME_SIZE_INTEL*/]; + } intel_qfprops[16]; + size_t nbytes = 0, i; + if (EXIT_SUCCESS == clGetDeviceInfo(c_dbcsr_acc_opencl_config.device.id, 0x418B /*CL_DEVICE_QUEUE_FAMILY_PROPERTIES_INTEL*/, + sizeof(intel_qfprops), intel_qfprops, &nbytes)) + { + for (i = 0; (i * sizeof(*intel_qfprops)) < nbytes; ++i) { + if (0 /*CL_QUEUE_DEFAULT_CAPABILITIES_INTEL*/ == intel_qfprops[i].capabilities && 1 < intel_qfprops[i].count) { + const int j = (0 /*terminator*/ == properties[2] ? 2 : 4); + properties[j + 0] = 0x418C; /* CL_QUEUE_FAMILY_INTEL */ + properties[j + 1] = (int)i; + properties[j + 2] = 0x418D; /* CL_QUEUE_INDEX_INTEL */ + properties[j + 3] = (i + offset) % intel_qfprops[i].count; + properties[j + 4] = 0; /* terminator */ + break; } } } - if ((c_dbcsr_acc_opencl_timer_device == c_dbcsr_acc_opencl_config.timer) && - (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity)) - { - properties[1] = CL_QUEUE_PROFILING_ENABLE; - } - queue = ACC_OPENCL_CREATE_COMMAND_QUEUE(c_dbcsr_acc_opencl_config.device.context, device, properties, &result); } - } - else { - result = EXIT_FAILURE; + if ((c_dbcsr_acc_opencl_timer_device == c_dbcsr_acc_opencl_config.timer) && + (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity)) + { + properties[1] = CL_QUEUE_PROFILING_ENABLE; + } + queue = ACC_OPENCL_CREATE_COMMAND_QUEUE( + c_dbcsr_acc_opencl_config.device.context, c_dbcsr_acc_opencl_config.device.id, properties, &result); } if (EXIT_SUCCESS == result) { /* register stream */ assert(NULL != c_dbcsr_acc_opencl_config.streams && NULL != queue); @@ -214,18 +221,15 @@ int c_dbcsr_acc_stream_priority_range(int* least, int* greatest) { if (0 < c_dbcsr_acc_opencl_config.ndevices) { char buffer[ACC_OPENCL_BUFFERSIZE]; cl_platform_id platform = NULL; - cl_device_id active_id = NULL; - if (EXIT_SUCCESS == result) { - result = clGetContextInfo( - c_dbcsr_acc_opencl_config.device.context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), &active_id, NULL); - } - ACC_OPENCL_CHECK(clGetDeviceInfo(active_id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL), + assert(NULL != c_dbcsr_acc_opencl_config.device.context); + ACC_OPENCL_CHECK( + clGetDeviceInfo(c_dbcsr_acc_opencl_config.device.id, CL_DEVICE_PLATFORM, sizeof(cl_platform_id), &platform, NULL), "retrieve platform associated with active device", result); ACC_OPENCL_CHECK(clGetPlatformInfo(platform, CL_PLATFORM_EXTENSIONS, ACC_OPENCL_BUFFERSIZE, buffer, NULL), "retrieve platform extensions", result); if (EXIT_SUCCESS == result) { if (NULL != strstr(buffer, "cl_khr_priority_hints") || - EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(active_id, "nvidia", 0 /*use_platform_name*/)) + EXIT_SUCCESS == c_dbcsr_acc_opencl_device_vendor(c_dbcsr_acc_opencl_config.device.id, "nvidia", 0 /*use_platform_name*/)) { priohi = CL_QUEUE_PRIORITY_HIGH_KHR; priolo = CL_QUEUE_PRIORITY_LOW_KHR; diff --git a/src/acc/opencl/common/opencl_atomics.h b/src/acc/opencl/common/opencl_atomics.h index 7809a5216cd..ac2a799f792 100644 --- a/src/acc/opencl/common/opencl_atomics.h +++ b/src/acc/opencl/common/opencl_atomics.h @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef OPENCL_ATOMICS_H #define OPENCL_ATOMICS_H diff --git a/src/acc/opencl/common/opencl_common.h b/src/acc/opencl/common/opencl_common.h index 8fa27d612c0..d41ee49acc5 100644 --- a/src/acc/opencl/common/opencl_common.h +++ b/src/acc/opencl/common/opencl_common.h @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef OPENCL_COMMON_H #define OPENCL_COMMON_H @@ -24,16 +24,6 @@ # define UNROLL_AUTO #endif -#if !defined(MIN) -# define MIN(A, B) ((A) < (B) ? (A) : (B)) -#endif -#if !defined(MAX) -# define MAX(A, B) ((A) < (B) ? (B) : (A)) -#endif -#if !defined(MAD) -# define MAD fma -#endif - #if !defined(LU) || (-1 == LU) # define UNROLL_OUTER(N) # define UNROLL(N) @@ -48,4 +38,21 @@ # define UNROLL(N) UNROLL_FORCE(N) #endif +#if !defined(MIN) +# define MIN(A, B) ((A) < (B) ? (A) : (B)) +#endif +#if !defined(MAX) +# define MAX(A, B) ((A) < (B) ? (B) : (A)) +#endif +#if !defined(MAD) +# define MAD fma +#endif + +#define DIVUP(A, B) (((A) + (B) - 1) / (B)) +#define NUP(N, UP) (DIVUP(N, UP) * (UP)) +#define BLR(N, BN) (NUP(N, BN) - (N)) + +#define IDX(I, J, M, N) ((int)(I) * (N) + (J)) +#define IDT(I, J, M, N) IDX(J, I, N, M) + #endif /*OPENCL_COMMON_H*/ diff --git a/src/acc/opencl/smm/kernels/multiply.cl b/src/acc/opencl/smm/kernels/multiply.cl index bf02cce2ade..b2e1de6a450 100644 --- a/src/acc/opencl/smm/kernels/multiply.cl +++ b/src/acc/opencl/smm/kernels/multiply.cl @@ -4,18 +4,18 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #include "../../common/opencl_atomics.h" #if !defined(AL) || (SM != SN) || (SM != BM) || (SN != SK) || (1 == BS) -# define ADX(M, K) adata[SM * K + M + a0] /* transposed */ -# define BDX(K, N) bdata[SN * K + N + b0] /* linear */ -# define CDX(M, N) cdata[SM * N + M + c0] /* transposed */ +# define ADX(M, K) adata[IDT(M, K, SM, SK) + a0] /* transposed */ +# define BDX(K, N) bdata[IDX(K, N, SK, SN) + b0] /* linear */ +# define CDX(M, N) cdata[IDT(M, N, SM, SN) + c0] /* transposed */ #else -# define ADX(M, K) adata[SK * M + K + a0] /* linear */ -# define BDX(K, N) bdata[SK * N + K + b0] /* transposed */ -# define CDX(M, N) cdata[SN * M + N + c0] /* linear */ +# define ADX(M, K) adata[IDX(M, K, SM, SK) + a0] /* linear */ +# define BDX(K, N) bdata[IDT(K, N, SK, SN) + b0] /* transposed */ +# define CDX(M, N) cdata[IDX(M, N, SM, SN) + c0] /* linear */ #endif #if defined(SLM_A) @@ -63,8 +63,8 @@ # define REPEAT 1 #endif -#define NBM ((SM + BM - 1) / BM) -#define NBN ((SN + BN - 1) / BN) +#define NBM DIVUP(SM, BM) +#define NBN DIVUP(SN, BN) #define WRK (NBM * NBN) #define UM (SM / BK) @@ -144,8 +144,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # if defined(SLM_C) local T cnm[SN][SM + SLM_C - 1]; /* tile in SLM */ for (SINT n = (SINT)idx; n < SN; n += SWG) { - UNROLL_FORCE(SM) - for (SINT m = 0; m < SM; ++m) cnm[n][m] = ZERO; + UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) cnm[n][m] = ZERO; } # elif (BM < SM || 1 != BN) # if (1 != BN) @@ -153,16 +152,13 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res for (SINT bn = 0; bn < BN; ++bn) # endif { - UNROLL_FORCE(BM) - for (SINT bm = 0; bm < BM; ++bm) CNM(bn, bm) = ZERO; + UNROLL_FORCE(BM) for (SINT bm = 0; bm < BM; ++bm) CNM(bn, bm) = ZERO; } # else - UNROLL_FORCE(SM) - for (SINT m = 0; m < SM; ++m) cnm[m] = ZERO; + UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) cnm[m] = ZERO; # endif # if defined(SLM_P) - UNROLL_FORCE(3 * BS) - for (int i = idx; i < (3 * batchsize); i += SWG) params[i] = pbase[i] - 1; + UNROLL_FORCE(3 * BS) for (int i = idx; i < (3 * batchsize); i += SWG) params[i] = pbase[i] - 1; # endif # if defined(BARRIER) && (MAX(1, SGS) < SWG) && (defined(SLM_C) || defined(SLM_P)) BARRIER(CLK_LOCAL_MEM_FENCE); @@ -200,8 +196,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res for (; m < SM; m += WRK) # endif { - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) amk[m][k] = ADX(m, k); + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[m][k] = ADX(m, k); } } #endif @@ -213,8 +208,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res for (; n < SN; n += WRK) # endif { - UNROLL(SK) - for (SINT k = 0; k < SK; ++k) bnk[n][k] = BDX(k, n); + UNROLL(SK) for (SINT k = 0; k < SK; ++k) bnk[n][k] = BDX(k, n); } } #elif defined(REG_B) @@ -224,8 +218,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # else { /* copy or transpose B-matrix into registers */ # endif - UNROLL(SK) - for (SINT k = 0; k < SK; ++k) { + UNROLL(SK) for (SINT k = 0; k < SK; ++k) { # if (BM < SM || 1 != BN) SINT bn = 0; # if (1 != BN) @@ -256,7 +249,8 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res { /* calculate result-tile using general tiles */ # if defined(REG_A) && !defined(SLM_A) && (1 != BK) # if (1 == BS) - T cnm[BN] = {ZERO}; /* row */ + T cnm[BN]; /* row */ + UNROLL_FORCE(BN) for (SINT n = 0; n < BN; ++n) cnm[n] = ZERO; # endif UNROLL(BM) # if (SM % BM) @@ -266,8 +260,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # endif { /* general BK, A in registers */ SINT bn = 0; - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) amk[k] = ADX(m, k); + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(m, k); # if (1 != BN) UNROLL(BN) for (; bn < BN; ++bn) @@ -287,8 +280,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # else const int mc = bn, nc = idx; # endif - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) { + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(nc, mc) = MAD(AMK(m, k), # if defined(REG_B) BNK(bn, k), @@ -318,16 +310,15 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res } # elif (1 == BK) # if (1 == BS) - T cnm[BM] = {ZERO}; /* column-block */ + T cnm[BM]; /* column-block */ + UNROLL_FORCE(BM) for (SINT m = 0; m < BM; ++m) cnm[m] = ZERO; # endif - UNROLL(SK) - for (SINT k = 0; k < SK; ++k) { + UNROLL(SK) for (SINT k = 0; k < SK; ++k) { # if (SN % BN) || !defined(REG_B) || (defined(SLM_C) && (1 < BS)) || (1 == BS) || (1 != BN) SINT bn = 0; # endif # if defined(REG_A) && !defined(SLM_A) - UNROLL_FORCE(BM) - for (SINT bm = 0; bm < BM; ++bm) amk[bm] = ADX(bm + m0, k); + UNROLL_FORCE(BM) for (SINT bm = 0; bm < BM; ++bm) amk[bm] = ADX(bm + m0, k); # endif # if (1 != BN) UNROLL(BN) @@ -365,8 +356,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # endif } # if (1 == BS) - UNROLL(BM) - for (SINT bm = 0; bm < BM; ++bm) { + UNROLL(BM) for (SINT bm = 0; bm < BM; ++bm) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, bm)) # endif @@ -394,7 +384,8 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # endif { /* general BK */ # if (1 == BS) - T cnm[BM] = {ZERO}; /* column-block */ + T cnm[BM]; /* column-block */ + UNROLL_FORCE(BM) for (SINT m = 0; m < BM; ++m) cnm[m] = ZERO; # endif UNROLL(BM) # if (SM % BM) @@ -421,12 +412,10 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # else const int nb = n; # endif - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) CNM(nc, mc) = MAD(AMK(m, k), BNK(nb, k), CNM(nc, mc)); + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) CNM(nc, mc) = MAD(AMK(m, k), BNK(nb, k), CNM(nc, mc)); } # if (1 == BS) - UNROLL(BM) - for (SINT bm = 0; bm < BM; ++bm) { + UNROLL(BM) for (SINT bm = 0; bm < BM; ++bm) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, bm)) # endif @@ -443,11 +432,11 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res #else /* BM == SM && 1 == BN */ { /* calculate result-tile using columns */ # if (1 == BS) - T cnm[UM] = {ZERO}; /* column-block */ + T cnm[UM]; /* column-block */ + UNROLL_FORCE(UM) for (SINT m = 0; m < UM; ++m) cnm[m] = ZERO; # endif # if (1 == BK) - UNROLL_OUTER(SK) - for (SINT k = 0; k < SK; ++k) { + UNROLL_OUTER(SK) for (SINT k = 0; k < SK; ++k) { const T b = BNK(idx, k); # if defined(SLM_A) # if (WRK != SM) @@ -456,8 +445,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res amk[idx] = ADX(idx, k); # endif # elif defined(REG_A) - UNROLL_FORCE(SM) - for (SINT m = 0; m < SM; ++m) amk[m] = ADX(m, k); + UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) amk[m] = ADX(m, k); # endif # if defined(BARRIER) && (MAX(1, SGS) < SWG) && defined(SLM_A) BARRIER(CLK_LOCAL_MEM_FENCE); @@ -465,8 +453,7 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # if defined(ACC_OPENCL_VERSION) && (200 /*2.0*/ <= ACC_OPENCL_VERSION) && (!defined(GPU) || (0 != GPU)) && !defined(SLM_A) && \ !defined(REG_A) && (WRK == SM) && (SM <= SGS || SM <= SWG) /* use ACC_OPENCL_VERSION rather than ACC_OPENCL_C_VERSION */ const T a = AMK(idx, k); - UNROLL_FORCE(SM) - for (SINT m = 0; m < SM; ++m) { + UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) { # if (SM <= SGS) CNM(idx, m) = MAD(sub_group_broadcast(a, m), b, CNM(idx, m)); /* size of subgroup is sufficient */ # else @@ -474,16 +461,14 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res # endif } # else - UNROLL_FORCE(SM) - for (SINT m = 0; m < SM; ++m) CNM(idx, m) = MAD(AMK(m, k), b, CNM(idx, m)); /* fallback */ + UNROLL_FORCE(SM) for (SINT m = 0; m < SM; ++m) CNM(idx, m) = MAD(AMK(m, k), b, CNM(idx, m)); /* fallback */ # endif # if defined(BARRIER) && (MAX(1, SGS) < SWG) && defined(SLM_A) BARRIER(CLK_LOCAL_MEM_FENCE); # endif } # if (1 == BS) - UNROLL(SM) - for (SINT m = 0; m < SM; ++m) { + UNROLL(SM) for (SINT m = 0; m < SM; ++m) { # if defined(ATOMIC_INC_NZ) if (ZERO != CNM(idx, m)) # endif @@ -512,13 +497,9 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res const int vm = u; # endif # if defined(REG_A) && !defined(SLM_A) - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k); + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k); # endif - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) { - CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); - } + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); } } # if (1 == BS) u = 0; @@ -550,13 +531,9 @@ FN(global T* restrict cdata, GLOBAL const T* restrict adata, GLOBAL const T* res const int vm = u; # endif # if defined(REG_A) && !defined(SLM_A) - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k); + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) amk[k] = ADX(um, k); # endif - UNROLL_FORCE(SK) - for (SINT k = 0; k < SK; ++k) { - CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); - } + UNROLL_FORCE(SK) for (SINT k = 0; k < SK; ++k) { CNM(idx, vm) = MAD(AMK(um, k), BNK(idx, k), CNM(idx, vm)); } } # if (1 == BS) u = 0; diff --git a/src/acc/opencl/smm/kernels/transpose.cl b/src/acc/opencl/smm/kernels/transpose.cl index 3e5bbc75a29..0d30fa73709 100644 --- a/src/acc/opencl/smm/kernels/transpose.cl +++ b/src/acc/opencl/smm/kernels/transpose.cl @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ __attribute__((reqd_work_group_size(SWG, 1, 1))) kernel void FN( diff --git a/src/acc/opencl/smm/opencl_libsmm.c b/src/acc/opencl/smm/opencl_libsmm.c index 6089fe572bd..58334d1fbff 100644 --- a/src/acc/opencl/smm/opencl_libsmm.c +++ b/src/acc/opencl/smm/opencl_libsmm.c @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #if defined(__OPENCL) # include "opencl_libsmm.h" @@ -76,9 +76,6 @@ # if !defined(OPENCL_LIBSMM_SMM_S) # define OPENCL_LIBSMM_SMM_S 64 # endif -# if !defined(OPENCL_LIBSMM_VLEN) -# define OPENCL_LIBSMM_VLEN 32 -# endif # if !defined(OPENCL_LIBSMM_VMIN) # define OPENCL_LIBSMM_VMIN 8 # endif @@ -464,14 +461,11 @@ int libsmm_acc_init(void) { if (EXIT_SUCCESS == result && '1' != control) { const char *line = OPENCL_KERNELS_PARAMS_SMM, *next; # if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER - cl_device_id active_id = NULL; unsigned int active_uid; int active_match = -1; - if (EXIT_SUCCESS == clGetContextInfo(c_dbcsr_acc_opencl_config.device.context, CL_CONTEXT_DEVICES, sizeof(cl_device_id), - &active_id, NULL) && - EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(active_id, bufname, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, - 0 /*platform_maxlen*/, /*cleanup*/ 1) && - EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(active_id, bufname, &active_uid)) + if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(c_dbcsr_acc_opencl_config.device.id, bufname, ACC_OPENCL_BUFFERSIZE, + NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 1) && + EXIT_SUCCESS == c_dbcsr_acc_opencl_device_uid(c_dbcsr_acc_opencl_config.device.id, bufname, &active_uid)) { int i = 0, best = 0; for (; i < ndevices_params; ++i) { @@ -523,8 +517,8 @@ int libsmm_acc_init(void) { if (NULL == config_init && NULL != libxsmm_xregister(&key, sizeof(key), sizeof(config), &config)) { static int info = 0; if (0 == info && 0 != c_dbcsr_acc_opencl_config.verbosity && - EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(active_id, bufname, ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, - 0 /*platform_maxlen*/, /*cleanup*/ 0)) + EXIT_SUCCESS == c_dbcsr_acc_opencl_device_name(c_dbcsr_acc_opencl_config.device.id, bufname, + ACC_OPENCL_BUFFERSIZE, NULL /*platform*/, 0 /*platform_maxlen*/, /*cleanup*/ 0)) { fprintf(stderr, "INFO ACC/LIBSMM: PARAMS of \"%s\" used for \"%s\"\n", OPENCL_KERNELS_DEVICES[i], bufname); info = 1; @@ -562,11 +556,11 @@ int libsmm_acc_init(void) { } } # if defined(OPENCL_KERNELS_DEVICES) - if (0 != c_dbcsr_acc_opencl_config.verbosity && 0 != ntuned) { + if (0 != ntuned && (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity)) { fprintf(stderr, "INFO ACC/LIBSMM: PARAMS in %u set%s loaded targeting ", ntuned, 1 != ntuned ? "s" : ""); if (0 != c_dbcsr_acc_opencl_config.devmatch) { fprintf(stderr, "%i device%s\n", ndevices_params, 1 != ndevices_params ? "s" : ""); - if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { + if (3 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { unsigned int i = 0; for (; i < (unsigned int)ndevices_params; ++i) { fprintf(stderr, "INFO ACC/LIBSMM: PARAMS -> \"%s\"\n", OPENCL_KERNELS_DEVICES[i]); @@ -694,84 +688,80 @@ int libsmm_acc_transpose(const int* dev_trs_stack, int offset, int stack_size, v c_dbcsr_timeset(LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_STRPTR, LIBSMM_ACC_TRANSPOSE_ROUTINE_NAME_LENPTR, &routine_handle); # endif if (0 < nchar && (int)sizeof(fname) > nchar) { - cl_device_id active_device; - result = clGetCommandQueueInfo(str->queue, CL_QUEUE_DEVICE, sizeof(cl_device_id), &active_device, NULL); - if (EXIT_SUCCESS == result) { - const char *const env_cl = getenv("OPENCL_LIBSMM_TRANS_BUILDOPTS"), *const env_bm = getenv("OPENCL_LIBSMM_TRANS_BM"); - const char* const cmem = (EXIT_SUCCESS != opencl_libsmm_use_cmem(active_device) ? "global" : "constant"); - const char* const param_format = "-DGLOBAL=%s -DINPLACE=%i -DFN=%s -DSM=%i -DSN=%i -DSWG=%i -DT=%s"; - const char *const env_inplace = getenv("OPENCL_LIBSMM_TRANS_INPLACE"), *tname = ""; + const char *const env_cl = getenv("OPENCL_LIBSMM_TRANS_BUILDOPTS"), *const env_bm = getenv("OPENCL_LIBSMM_TRANS_BM"); + const char* const cmem = (EXIT_SUCCESS != opencl_libsmm_use_cmem(c_dbcsr_acc_opencl_config.device.id) ? "global" + : "constant"); + const char* const param_format = "-DGLOBAL=%s -DINPLACE=%i -DFN=%s -DSM=%i -DSN=%i -DSWG=%i -DT=%s"; + const char *const env_inplace = getenv("OPENCL_LIBSMM_TRANS_INPLACE"), *tname = ""; # if defined(OPENCL_LIBSMM_TRANS_INPLACE) - const int inplace = ((m == n) && (NULL == env_inplace ? 1 : ('0' != *env_inplace))); + const int inplace = ((m == n) && (NULL == env_inplace ? 1 : ('0' != *env_inplace))); # else - const int inplace = ((m == n) && (NULL == env_inplace ? 0 : ('0' != *env_inplace))); + const int inplace = ((m == n) && (NULL == env_inplace ? 0 : ('0' != *env_inplace))); # endif - const int blockm = ((NULL == env_bm || '\0' == *env_bm) ? 0 : atoi(env_bm)); - const int bm = (0 >= blockm ? (NULL == config ? /*default*/ m : /*LIBXSMM_CLMP(config->bm, 1, m)*/ m) - : LIBXSMM_MIN(blockm, m)); - size_t wgsize_max; - opencl_libsmm_trans_t new_config; - memset(&new_config, 0, sizeof(new_config)); - result = c_dbcsr_acc_opencl_wgsize(active_device, NULL /*kernel*/, &wgsize_max, NULL /*prefmult*/); + const int blockm = ((NULL == env_bm || '\0' == *env_bm) ? 0 : atoi(env_bm)); + const int bm = (0 >= blockm ? (NULL == config ? /*default*/ m : /*LIBXSMM_CLMP(config->bm, 1, m)*/ m) + : LIBXSMM_MIN(blockm, m)); + opencl_libsmm_trans_t new_config; + memset(&new_config, 0, sizeof(new_config)); + switch (datatype) { + case dbcsr_type_real_8: { + tname = "char8"; /* double */ + fname[0] = 'd'; + } break; + case dbcsr_type_real_4: { + tname = "float"; + fname[0] = 's'; + } break; + default: assert('\0' == *tname); + } + new_config.wgsize = LIBXSMM_MIN((size_t)((m == bm || 0 == (m % bm)) ? bm : m), c_dbcsr_acc_opencl_config.device.wgsize[0]); + nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s", NULL == env_cl ? "" : env_cl); + if (0 <= /*<*/ nchar && (int)sizeof(buffer) > nchar) { + nchar = LIBXSMM_SNPRINTF( + build_params, sizeof(build_params), param_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname); + } + if ('\0' != *tname && 0 < nchar && (int)sizeof(build_params) > nchar) { + result = c_dbcsr_acc_opencl_kernel(0 /*source_is_file*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params, buffer, + NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel); if (EXIT_SUCCESS == result) { - switch (datatype) { - case dbcsr_type_real_8: { - tname = "char8"; /* double */ - fname[0] = 'd'; - } break; - case dbcsr_type_real_4: { - tname = "float"; - fname[0] = 's'; - } break; - default: assert('\0' == *tname); - } - new_config.wgsize = LIBXSMM_MIN((size_t)((m == bm || 0 == (m % bm)) ? bm : m), wgsize_max); - nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s", NULL == env_cl ? "" : env_cl); - if (0 <= /*<*/ nchar && (int)sizeof(buffer) > nchar) { - nchar = LIBXSMM_SNPRINTF( - build_params, sizeof(build_params), param_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname); - } - } - if ('\0' != *tname && 0 < nchar && (int)sizeof(build_params) > nchar) { - result = c_dbcsr_acc_opencl_kernel(0 /*source_is_file*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params, buffer, - NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel); + size_t wgsize_max; + assert(NULL != new_config.kernel); + result = clGetKernelWorkGroupInfo( + new_config.kernel, c_dbcsr_acc_opencl_config.device.id, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wgsize_max, NULL); if (EXIT_SUCCESS == result) { - result = c_dbcsr_acc_opencl_wgsize(active_device, new_config.kernel, &wgsize_max, NULL /*prefmult*/); - if (EXIT_SUCCESS == result) { - assert(0 < wgsize_max); - if (wgsize_max < new_config.wgsize) { - new_config.wgsize = wgsize_max; - nchar = LIBXSMM_SNPRINTF( - build_params, sizeof(build_params), param_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname); - if (0 < nchar && (int)sizeof(build_params) > nchar) { - result = c_dbcsr_acc_opencl_kernel(0 /*source_is_file*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params, - buffer, NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel); - } - else result = EXIT_FAILURE; + assert(0 < wgsize_max); + if (wgsize_max < new_config.wgsize) { + new_config.wgsize = wgsize_max; + nchar = LIBXSMM_SNPRINTF( + build_params, sizeof(build_params), param_format, cmem, inplace, fname, m, n, (int)new_config.wgsize, tname); + if (0 < nchar && (int)sizeof(build_params) > nchar) { + result = c_dbcsr_acc_opencl_kernel(0 /*source_is_file*/, OPENCL_KERNELS_SOURCE_TRANSPOSE, fname, build_params, + buffer, NULL /*try*/, NULL /*try_ok*/, NULL /*extnames*/, 0 /*num_exts*/, &new_config.kernel); } - if (EXIT_SUCCESS == result) { - config = (opencl_libsmm_trans_t*)libxsmm_xregister(&key, sizeof(key), sizeof(new_config), &new_config); + else result = EXIT_FAILURE; + } + if (EXIT_SUCCESS == result) { + config = (opencl_libsmm_trans_t*)libxsmm_xregister(&key, sizeof(key), sizeof(new_config), &new_config); # if !defined(OPENCL_LIBSMM_VALIDATE_TRANS) - if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { - LIBXSMM_STDIO_ACQUIRE(); - duration = libxsmm_timer_duration(start, libxsmm_timer_tick()); - fprintf(stderr, "INFO ACC/LIBSMM: TRANS-kernel "); - opencl_libsmm_write_trans_params( - stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); - fprintf(stderr, "="); - opencl_libsmm_write_trans_params( - stderr, 0 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); - fprintf(stderr, " gen=%.1f ms\n", 1E3 * duration); - LIBXSMM_STDIO_RELEASE(); - } -# endif + if (2 <= c_dbcsr_acc_opencl_config.verbosity || 0 > c_dbcsr_acc_opencl_config.verbosity) { + LIBXSMM_STDIO_ACQUIRE(); + duration = libxsmm_timer_duration(start, libxsmm_timer_tick()); + fprintf(stderr, "INFO ACC/LIBSMM: TRANS-kernel "); + opencl_libsmm_write_trans_params( + stderr, 0 /*only_key*/, &key, NULL /*config*/, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); + fprintf(stderr, "="); + opencl_libsmm_write_trans_params( + stderr, 0 /*only_key*/, &key, config, NULL /*delim*/, NULL /*begin*/, NULL /*close*/); + fprintf(stderr, " gen=%.1f ms\n", 1E3 * duration); + LIBXSMM_STDIO_RELEASE(); } +# endif } } } - else if (EXIT_SUCCESS == result) { - result = EXIT_FAILURE; - } + } + else if (EXIT_SUCCESS == result) { + result = EXIT_FAILURE; } } else { @@ -1037,14 +1027,11 @@ int libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, int nchar = LIBXSMM_SNPRINTF(fname, sizeof(fname), /* kernel name are meant to be unambiguous (BLAS-typeprefix and kernelsize) */ "x" OPENCL_LIBSMM_KERNELNAME_SMM "%ix%ix%i", m_max, n_max, k_max); - cl_device_id active_device = NULL; # if defined(__DBCSR_ACC) int routine_handle; c_dbcsr_timeset(LIBSMM_ACC_PROCESS_ROUTINE_NAME_STRPTR, LIBSMM_ACC_PROCESS_ROUTINE_NAME_LENPTR, &routine_handle); # endif - result = ((0 < nchar && (int)sizeof(fname) > nchar) - ? clGetCommandQueueInfo(str->queue, CL_QUEUE_DEVICE, sizeof(cl_device_id), &active_device, NULL) - : EXIT_FAILURE); + result = ((0 < nchar && (int)sizeof(fname) > nchar) ? EXIT_SUCCESS : EXIT_FAILURE); if (EXIT_SUCCESS == result) { c_dbcsr_acc_opencl_atomic_fp_t tkind = c_dbcsr_acc_opencl_atomic_fp_no; const char* tname = NULL; @@ -1065,7 +1052,34 @@ int libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, const char *extensions[] = {NULL, NULL}, *const env_devid = getenv("OPENCL_LIBSMM_SMM_DEVID"); const unsigned int devuid = (NULL == env_devid || '\0' == *env_devid) ? c_dbcsr_acc_opencl_config.device.uid : (unsigned int)strtoul(env_devid, NULL, 0); - size_t wgsize_max, wgsize_prf, sgs = 0; + size_t nextensions = sizeof(extensions) / sizeof(*extensions), sgs = 0, wgsize_prf = 1; + const char *const env_bm = getenv("OPENCL_LIBSMM_SMM_BM"), *const env_bn = getenv("OPENCL_LIBSMM_SMM_BN"); + const char *const env_bk = getenv("OPENCL_LIBSMM_SMM_BK"), *const env_ws = getenv("OPENCL_LIBSMM_SMM_WS"); + const char *const env_wg = getenv("OPENCL_LIBSMM_SMM_WG"), *const env_lu = getenv("OPENCL_LIBSMM_SMM_LU"); + const char *const env_nz = getenv("OPENCL_LIBSMM_SMM_NZ"), *const env_al = getenv("OPENCL_LIBSMM_SMM_AL"); + const char *const env_tb = getenv("OPENCL_LIBSMM_SMM_TB"), *const env_tc = getenv("OPENCL_LIBSMM_SMM_TC"); + const char *const env_ap = getenv("OPENCL_LIBSMM_SMM_AP"), *const env_aa = getenv("OPENCL_LIBSMM_SMM_AA"); + const char *const env_ab = getenv("OPENCL_LIBSMM_SMM_AB"), *const env_ac = getenv("OPENCL_LIBSMM_SMM_AC"); + const char *const env_xf = getenv("OPENCL_LIBSMM_SMM_XF"), *const env_cl = getenv("OPENCL_LIBSMM_SMM_BUILDOPTS"); + const char* const intel_xf = "-cl-intel-256-GRF-per-thread"; + const int default_lu = (0 != c_dbcsr_acc_opencl_config.device.intel ? -1 : 0); + const int unroll = LIBXSMM_MAX(-2, (NULL == env_lu || '\0' == *env_lu) + ? (0 == kernel_idx ? (NULL == config ? default_lu : config->lu) : default_lu) + : atoi(env_lu)); /* populate only lower bound */ + const int blockm = ((NULL == env_bm || '\0' == *env_bm || 1 < unroll) /* 1= unroll ? 0 : LIBXSMM_UP(m_max / unroll, OPENCL_LIBSMM_VMIN)) + : atoi(env_bm)); + const int blockn = ((NULL == env_bn || '\0' == *env_bn) ? 0 : atoi(env_bn)); + const int blockk = ((NULL == env_bk || '\0' == *env_bk) ? 0 : atoi(env_bk)); + const int wgmin = ((NULL == env_ws || '\0' == *env_ws) ? 0 : atoi(env_ws)); + const int default_aa = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? ((k_max % OPENCL_LIBSMM_VMIN) ? 1 : 2) : 0); + const int default_ab = (((0x0bd0 > devuid || 0x0bdb < devuid) && 0x020a != devuid) ? 3 : 0), default_ac = 0; + const int default_bk = (((0x0bd0 > devuid || 0x0bdb < devuid) && 0x020a != devuid) + ? (0 == kernel_idx ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BK, m_max) + : LIBXSMM_MIN(OPENCL_LIBSMM_VMIN, m_max)) + : 1); + const int default_wg = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? (0 == kernel_idx ? 0 : -2) : -1); + int nbm, nbn; opencl_libsmm_smm_t new_config; if (NULL == config) { memset(&new_config, 0, sizeof(new_config)); @@ -1073,231 +1087,175 @@ int libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, else { /* preserve kernels, performance counters, etc. */ memcpy(&new_config, config, sizeof(opencl_libsmm_smm_t)); } - result = c_dbcsr_acc_opencl_wgsize(active_device, NULL /*device-specific*/, &wgsize_max, &wgsize_prf); - assert(EXIT_SUCCESS != result || 0 < wgsize_prf); - if (EXIT_SUCCESS == result) { - const char *const env_bm = getenv("OPENCL_LIBSMM_SMM_BM"), *const env_bn = getenv("OPENCL_LIBSMM_SMM_BN"); - const char *const env_bk = getenv("OPENCL_LIBSMM_SMM_BK"), *const env_ws = getenv("OPENCL_LIBSMM_SMM_WS"); - const char *const env_wg = getenv("OPENCL_LIBSMM_SMM_WG"), *const env_lu = getenv("OPENCL_LIBSMM_SMM_LU"); - const char *const env_nz = getenv("OPENCL_LIBSMM_SMM_NZ"), *const env_al = getenv("OPENCL_LIBSMM_SMM_AL"); - const char *const env_tb = getenv("OPENCL_LIBSMM_SMM_TB"), *const env_tc = getenv("OPENCL_LIBSMM_SMM_TC"); - const char *const env_ap = getenv("OPENCL_LIBSMM_SMM_AP"), *const env_aa = getenv("OPENCL_LIBSMM_SMM_AA"); - const char *const env_ab = getenv("OPENCL_LIBSMM_SMM_AB"), *const env_ac = getenv("OPENCL_LIBSMM_SMM_AC"); - const char *const env_xf = getenv("OPENCL_LIBSMM_SMM_XF"), *const env_cl = getenv("OPENCL_LIBSMM_SMM_BUILDOPTS"); - const char* const intel_xf = "-cl-intel-256-GRF-per-thread"; - const int default_lu = (0 != c_dbcsr_acc_opencl_config.device.intel ? -1 : 0); - const int unroll = LIBXSMM_MAX(-2, (NULL == env_lu || '\0' == *env_lu) - ? (0 == kernel_idx ? (NULL == config ? default_lu : config->lu) : default_lu) - : atoi(env_lu)); /* populate only lower bound */ - const int blockm = ((NULL == env_bm || '\0' == *env_bm || 1 < unroll) /* 1= unroll ? 0 : LIBXSMM_UP(m_max / unroll, OPENCL_LIBSMM_VMIN)) - : atoi(env_bm)); - const int blockn = ((NULL == env_bn || '\0' == *env_bn) ? 0 : atoi(env_bn)); - const int blockk = ((NULL == env_bk || '\0' == *env_bk) ? 0 : atoi(env_bk)); - const int wgmin = ((NULL == env_ws || '\0' == *env_ws) ? 0 : atoi(env_ws)); - const int default_aa = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? ((k_max % OPENCL_LIBSMM_VMIN) ? 1 : 2) : 0); - const int default_ab = (((0x0bd0 > devuid || 0x0bdb < devuid) && 0x020a != devuid) ? 3 : 0), default_ac = 0; - const int default_bk = (((0x0bd0 > devuid || 0x0bdb < devuid) && 0x020a != devuid) - ? (0 == kernel_idx ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BK, m_max) - : LIBXSMM_MIN(OPENCL_LIBSMM_VMIN, m_max)) - : 1); - const int default_wg = (((0x0bd0 > devuid || 0x0bdb < devuid)) ? (0 == kernel_idx ? 0 : -2) : -1); - int nbm, nbn; - new_config.lu = unroll; - /* two defaults for new_config parameters: 1st - regular, 2nd - BS=1 kernel */ - new_config.bm = (0 >= blockm ? (0 == kernel_idx ? (NULL == config ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max) - : LIBXSMM_CLMP(config->bm, 1, m_max)) - : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max)) - : LIBXSMM_MIN(blockm, m_max)); - new_config.bn = (0 >= blockn ? (0 == kernel_idx ? (NULL == config ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max) - : LIBXSMM_CLMP(config->bn, 1, n_max)) - : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max)) - : LIBXSMM_MIN(blockn, n_max)); - new_config.bk = (0 >= blockk ? (NULL == config ? default_bk : LIBXSMM_CLMP(config->bk, 1, m_max)) - : LIBXSMM_MIN(blockk, m_max)); - new_config.ws = (0 >= wgmin ? (0 == kernel_idx ? (NULL == config ? /*default*/ LIBXSMM_MAX(m_max, n_max) - : LIBXSMM_CLMP(config->ws, 1, n_max * m_max)) - : /*default*/ LIBXSMM_MAX(m_max, n_max)) - : LIBXSMM_MIN(wgmin, n_max * m_max)); - new_config.wg = LIBXSMM_CLMP( - (NULL == env_wg || '\0' == *env_wg) ? (NULL == config ? default_wg : config->wg) : atoi(env_wg), -2, 2); - new_config.nz = LIBXSMM_CLMP((NULL == env_nz || '\0' == *env_nz) - ? (0 == kernel_idx ? (NULL == config ? /*default*/ 0 : config->nz) : /*default*/ 0) - : atoi(env_nz), - 0, 1); - new_config.al = LIBXSMM_CLMP(/* bug: AL=1 */ - (NULL == env_al || '\0' == *env_al) ? 0 /*(0 == kernel_idx ? (NULL == config ? 0 : config->al) : 0)*/ - : atoi(env_al), - 0, 1); - new_config.tb = LIBXSMM_CLMP((NULL == env_tb || '\0' == *env_tb) - ? (0 == kernel_idx ? (NULL == config ? /*default*/ 0 : config->tb) : /*default*/ 0) - : atoi(env_tb), - 0, 1); - new_config.tc = LIBXSMM_CLMP((NULL == env_tc || '\0' == *env_tc) - ? (0 == kernel_idx ? (NULL == config ? /*default*/ 1 : config->tc) : /*default*/ 1) - : atoi(env_tc), - 0, 1); - new_config.ap = LIBXSMM_CLMP((NULL == env_ap || '\0' == *env_ap) - ? (0 == kernel_idx ? (NULL == config ? /*default*/ 0 : config->ap) : /*default*/ 0) - : atoi(env_ap), - 0, 1); - new_config.aa = LIBXSMM_CLMP( - (NULL == env_aa || '\0' == *env_aa) - ? (0 == kernel_idx ? (NULL == config ? /*default*/ default_aa : config->aa) : /*default*/ default_aa) - : atoi(env_aa), - 0, 2); - new_config.ab = LIBXSMM_CLMP( - (NULL == env_ab || '\0' == *env_ab) - ? (0 == kernel_idx ? (NULL == config ? /*default*/ default_ab : config->ab) : /*default*/ default_ab) - : atoi(env_ab), - 0, 2); - new_config.ac = LIBXSMM_CLMP( - (NULL == env_ac || '\0' == *env_ac) - ? (0 == kernel_idx ? (NULL == config ? /*default*/ default_ac : config->ac) : /*default*/ default_ac) - : atoi(env_ac), - 0, 1); - if (NULL == env_xf || '\0' == *env_xf) { - if (0 == c_dbcsr_acc_opencl_config.device.intel || CL_DEVICE_TYPE_GPU != c_dbcsr_acc_opencl_config.device.type || - NULL == env_cl || NULL == strstr(env_cl, intel_xf)) - { - new_config.flags = (NULL == config ? /*default*/ 0 : config->flags); + if (NULL == env_xf || '\0' == *env_xf) { + if (0 == c_dbcsr_acc_opencl_config.device.intel || CL_DEVICE_TYPE_GPU != c_dbcsr_acc_opencl_config.device.type || + NULL == env_cl || NULL == strstr(env_cl, intel_xf)) + { + new_config.flags = (NULL == config ? /*default*/ 0 : config->flags); + } + else new_config.flags = 1; + } + else new_config.flags = atoi(env_xf); + new_config.lu = unroll; + /* two defaults for new_config parameters: 1st - regular, 2nd - BS=1 kernel */ + new_config.bm = (0 >= blockm ? (0 == kernel_idx ? (NULL == config ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max) + : LIBXSMM_CLMP(config->bm, 1, m_max)) + : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BM, m_max)) + : LIBXSMM_MIN(blockm, m_max)); + new_config.bn = (0 >= blockn ? (0 == kernel_idx ? (NULL == config ? LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max) + : LIBXSMM_CLMP(config->bn, 1, n_max)) + : LIBXSMM_MIN(OPENCL_LIBSMM_DEFAULT_BN, n_max)) + : LIBXSMM_MIN(blockn, n_max)); + new_config.bk = (0 >= blockk ? (NULL == config ? default_bk : LIBXSMM_CLMP(config->bk, 1, m_max)) + : LIBXSMM_MIN(blockk, m_max)); + new_config.ws = (0 >= wgmin ? (0 == kernel_idx ? (NULL == config ? /*default*/ LIBXSMM_MAX(m_max, n_max) + : LIBXSMM_CLMP(config->ws, 1, n_max * m_max)) + : /*default*/ LIBXSMM_MAX(m_max, n_max)) + : LIBXSMM_MIN(wgmin, n_max * m_max)); + new_config.wg = LIBXSMM_CLMP( + (NULL == env_wg || '\0' == *env_wg) ? (NULL == config ? default_wg : config->wg) : atoi(env_wg), -2, 2); + new_config.nz = LIBXSMM_CLMP((NULL == env_nz || '\0' == *env_nz) + ? (0 == kernel_idx ? (NULL == config ? /*default*/ 0 : config->nz) : /*default*/ 0) + : atoi(env_nz), + 0, 1); + new_config.al = LIBXSMM_CLMP(/* bug: AL=1 */ + (NULL == env_al || '\0' == *env_al) + ? (0 == (8 & c_dbcsr_acc_opencl_config.wa) ? (0 == kernel_idx ? (NULL == config ? 0 : config->al) : 0) : 0) + : atoi(env_al), + 0, 1); + new_config.tb = LIBXSMM_CLMP((NULL == env_tb || '\0' == *env_tb) + ? (0 == kernel_idx ? (NULL == config ? /*default*/ 0 : config->tb) : /*default*/ 0) + : atoi(env_tb), + 0, 1); + new_config.tc = LIBXSMM_CLMP((NULL == env_tc || '\0' == *env_tc) + ? (0 == kernel_idx ? (NULL == config ? /*default*/ 1 : config->tc) : /*default*/ 1) + : atoi(env_tc), + 0, 1); + new_config.ap = LIBXSMM_CLMP((NULL == env_ap || '\0' == *env_ap) + ? (0 == kernel_idx ? (NULL == config ? /*default*/ 0 : config->ap) : /*default*/ 0) + : atoi(env_ap), + 0, 1); + new_config.aa = LIBXSMM_CLMP(/* bug: AA=2 XF=1 */ + (NULL == env_aa || '\0' == *env_aa) ? (0 == kernel_idx ? (NULL == config ? default_aa : config->aa) : default_aa) + : atoi(env_aa), + 0, (0 == (16 & c_dbcsr_acc_opencl_config.wa) || 0 == new_config.flags) ? 2 : 1); + new_config.ab = LIBXSMM_CLMP((NULL == env_ab || '\0' == *env_ab) + ? (0 == kernel_idx ? (NULL == config ? default_ab : config->ab) : default_ab) + : atoi(env_ab), + 0, 2); + new_config.ac = LIBXSMM_CLMP((NULL == env_ac || '\0' == *env_ac) + ? (0 == kernel_idx ? (NULL == config ? default_ac : config->ac) : default_ac) + : atoi(env_ac), + 0, 1); + if (0 >= new_config.s) new_config.s = stack_size; + if (0 == kernel_idx || 1 >= new_config.bs) new_config.bs = bs; + nbm = (m_max + new_config.bm - 1) / new_config.bm; + nbn = (n_max + new_config.bn - 1) / new_config.bn; + new_config.wgsize[kernel_idx] = LIBXSMM_MAX(nbm * nbn, new_config.ws); + if (0 != new_config.wg) { + if (0 != c_dbcsr_acc_opencl_config.device.wgsize[2]) { /* subgroups supported */ + if (new_config.wgsize[kernel_idx] <= c_dbcsr_acc_opencl_config.device.wgsize[2]) { + sgs = c_dbcsr_acc_opencl_config.device.wgsize[2]; + } + else if (new_config.wgsize[kernel_idx] <= c_dbcsr_acc_opencl_config.device.wgsize[1]) { + sgs = c_dbcsr_acc_opencl_config.device.wgsize[1]; } - else new_config.flags = 1; } - else new_config.flags = atoi(env_xf); - if (0 >= new_config.s) new_config.s = stack_size; - if (0 == kernel_idx || 1 >= new_config.bs) new_config.bs = bs; + wgsize_prf = LIBXSMM_UP(new_config.wgsize[kernel_idx], 0 != sgs ? sgs : c_dbcsr_acc_opencl_config.device.wgsize[1]); + } + else { /* cover exactly */ + wgsize_prf = new_config.wgsize[kernel_idx]; + } + if (2 <= new_config.wg) wgsize_prf = LIBXSMM_UP2POT(wgsize_prf); + if (wgsize_prf < (2 * new_config.wgsize[kernel_idx])) new_config.wgsize[kernel_idx] = wgsize_prf; /* limit */ + assert(1 <= bs && 0 < new_config.wgsize[kernel_idx] && 0 < wgsize_prf); + /* ensure minimum requested WG-size */ + while ((nbm * nbn) < new_config.ws && (nbm < m_max || nbn < n_max)) { + if (nbn < n_max) ++nbn; + else if (nbm < m_max) ++nbm; + } + if ((nbm * nbn) < new_config.ws) { + new_config.bn = (n_max + nbn - 1) / nbn; + new_config.bm = (m_max + nbm - 1) / nbm; + new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn))); + } + else { /* reset */ nbm = (m_max + new_config.bm - 1) / new_config.bm; nbn = (n_max + new_config.bn - 1) / new_config.bn; - new_config.wgsize[kernel_idx] = LIBXSMM_MAX(nbm * nbn, new_config.ws); -# if LIBXSMM_VERSION4(1, 17, 0, 0) < LIBXSMM_VERSION_NUMBER - if (0 != new_config.wg) { - const unsigned int limit = (unsigned int)LIBXSMM_MAX(wgsize_prf, OPENCL_LIBSMM_VLEN); - unsigned int r = libxsmm_remainder( - (unsigned int)new_config.wgsize[kernel_idx], OPENCL_LIBSMM_VMIN, &limit, NULL /*remainder*/); - if (0 > new_config.wg) { - const char* const extension = "cl_intel_required_subgroup_size"; - if (EXIT_SUCCESS == c_dbcsr_acc_opencl_device_ext(active_device, &extension, 1)) { - unsigned int q = limit, i = 0; - size_t sizes[16], nbytes = 0; - ACC_OPENCL_EXPECT(EXIT_SUCCESS == clGetDeviceInfo(active_device, 0x4108 /*CL_DEVICE_SUB_GROUP_SIZES_INTEL*/, - sizeof(sizes), sizes, &nbytes)); - if (-1 == new_config.wg) { /* cover entire WG-size in sub-group size */ - for (; (i * sizeof(size_t)) < nbytes; ++i) { - sgs = sizes[i]; - if (new_config.wgsize[kernel_idx] <= sgs) break; - } - if (new_config.wgsize[kernel_idx] > sgs) sgs = 0; - } - else { /* explicit sub-group size with minimized WG-remainder */ - for (; (i * sizeof(size_t)) < nbytes; ++i) { - r = libxsmm_remainder( - (unsigned int)new_config.wgsize[kernel_idx], (unsigned int)sizes[i], &limit, NULL /*remainder*/); - if (r <= q) { - q = r; - sgs = sizes[i]; - } - } - } - wgsize_prf = new_config.wgsize[kernel_idx]; - } - else wgsize_prf = r; - } - else wgsize_prf = r; - } - else -# endif - { - wgsize_prf = new_config.wgsize[kernel_idx]; - } - if (2 <= new_config.wg) wgsize_prf = LIBXSMM_UP2POT(wgsize_prf); - if (wgsize_prf < (2 * new_config.wgsize[kernel_idx])) new_config.wgsize[kernel_idx] = wgsize_prf; /* limit */ - assert(1 <= bs && 0 < new_config.wgsize[kernel_idx] && 0 < wgsize_max && 0 < wgsize_prf); - /* ensure minimum requested WG-size */ - while ((nbm * nbn) < new_config.ws && (nbm < m_max || nbn < n_max)) { - if (nbn < n_max) ++nbn; - else if (nbm < m_max) ++nbm; - } - if ((nbm * nbn) < new_config.ws) { - new_config.bn = (n_max + nbn - 1) / nbn; - new_config.bm = (m_max + nbm - 1) / nbm; - new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn))); + } + /* limit WG-size to maximum WG-size */ + while (c_dbcsr_acc_opencl_config.device.wgsize[0] < new_config.wgsize[kernel_idx] && + (new_config.bm < m_max || new_config.bn < n_max)) + { + if (new_config.bn < n_max) { + ++new_config.bn; + nbn = (n_max + new_config.bn - 1) / new_config.bn; } - else { /* reset */ + else if (new_config.bm < m_max) { + ++new_config.bm; nbm = (m_max + new_config.bm - 1) / new_config.bm; - nbn = (n_max + new_config.bn - 1) / new_config.bn; } - /* limit WG-size to maximum WG-size */ - while (wgsize_max < new_config.wgsize[kernel_idx] && (new_config.bm < m_max || new_config.bn < n_max)) { - if (new_config.bn < n_max) { - ++new_config.bn; - nbn = (n_max + new_config.bn - 1) / new_config.bn; - } - else if (new_config.bm < m_max) { - ++new_config.bm; - nbm = (m_max + new_config.bm - 1) / new_config.bm; - } - new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn))); + new_config.wgsize[kernel_idx] = (2 > new_config.wg ? (nbm * nbn) : ((int)LIBXSMM_UP2POT(nbm * nbn))); + } + if (new_config.wgsize[kernel_idx] <= c_dbcsr_acc_opencl_config.device.wgsize[0]) { /* SMM can be handled by device */ + const char* const cmem = (EXIT_SUCCESS != opencl_libsmm_use_cmem(c_dbcsr_acc_opencl_config.device.id) ? "global" + : "constant"); + const char* const env_nrepeat = getenv("SMM_NREPEAT"); + const int typesize = OPENCL_LIBSMM_TYPESIZE(datatype); + const int slm_a = (1 != new_config.aa ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1)); + const int slm_b = (1 != new_config.ab ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1)); + const int slm_c = (1 != new_config.ac ? 0 : (LIBXSMM_ISPOT(m_max * typesize) + 1)); + /* compose build parameters and flags */ + nchar = LIBXSMM_SNPRINTF(build_params, sizeof(build_params), + "-DT=%s -DGPU=%u -DGLOBAL=%s -DSWG=%i -DSGS=%i -DFN=%s -DREPEAT=%i -DLU=%i " + "-DSM=%i -DSN=%i -DSK=%i -DBS=%i -DVL=%i %s -DBM=%i -DBN=%i -DBK=%i " + "%s %s %s %s %s %s %s %s ", /* space! */ + tname, CL_DEVICE_TYPE_GPU == c_dbcsr_acc_opencl_config.device.type, cmem, (int)new_config.wgsize[kernel_idx], + (int)sgs, fname, NULL == env_nrepeat ? 1 : atoi(env_nrepeat), new_config.lu, m_max, n_max, k_max, bs, + OPENCL_LIBSMM_VMIN, bs == new_config.bs ? "-DBSC" : "", new_config.bm, new_config.bn, new_config.bk, + 0 == new_config.tb ? "" : "-DTRACK_B", 0 != new_config.tc ? "-DTRACK_C" : "", + 0 == new_config.nz ? "" : "-DATOMIC_INC_NZ", 0 == new_config.al ? "" : "-DAL", 0 == new_config.ap ? "" : "-DSLM_P", + 0 == new_config.aa ? "" : (1 == slm_a ? "-DSLM_A=1" : (0 != slm_a ? "-DSLM_A=2" : "-DREG_A")), + 0 == new_config.ab ? "" : (1 == slm_b ? "-DSLM_B=1" : (0 != slm_b ? "-DSLM_B=2" : "-DREG_B")), + 0 == new_config.ac ? "" : (1 == slm_c ? "-DSLM_C=1" : "-DSLM_C=2")); + /* apply support for FP-atomics */ + if (0 < nchar && (int)sizeof(build_params) > nchar) { + nchar = c_dbcsr_acc_opencl_flags_atomics(&c_dbcsr_acc_opencl_config.device, tkind, extensions, &nextensions, + build_params + nchar, sizeof(build_params) - nchar); } - if (new_config.wgsize[kernel_idx] <= wgsize_max) { /* SMMs can be potentially handled by device */ - const char* const cmem = (EXIT_SUCCESS != opencl_libsmm_use_cmem(active_device) ? "global" : "constant"); - const char* const env_nrepeat = getenv("SMM_NREPEAT"); - const int typesize = OPENCL_LIBSMM_TYPESIZE(datatype); - const int slm_a = (1 != new_config.aa ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1)); - const int slm_b = (1 != new_config.ab ? 0 : (LIBXSMM_ISPOT(k_max * typesize) + 1)); - const int slm_c = (1 != new_config.ac ? 0 : (LIBXSMM_ISPOT(m_max * typesize) + 1)); - /* compose build parameters and flags */ - nchar = LIBXSMM_SNPRINTF(build_params, sizeof(build_params), - "-DT=%s -DGPU=%u -DGLOBAL=%s -DSWG=%i -DSGS=%i -DFN=%s -DREPEAT=%i -DLU=%i " - "-DSM=%i -DSN=%i -DSK=%i -DBS=%i -DVL=%i %s -DBM=%i -DBN=%i -DBK=%i " - "%s %s %s %s %s %s %s %s ", /* space! */ - tname, CL_DEVICE_TYPE_GPU == c_dbcsr_acc_opencl_config.device.type, cmem, (int)new_config.wgsize[kernel_idx], - (int)sgs, fname, NULL == env_nrepeat ? 1 : atoi(env_nrepeat), new_config.lu, m_max, n_max, k_max, bs, - OPENCL_LIBSMM_VMIN, bs == new_config.bs ? "-DBSC" : "", new_config.bm, new_config.bn, new_config.bk, - 0 == new_config.tb ? "" : "-DTRACK_B", 0 != new_config.tc ? "-DTRACK_C" : "", - 0 == new_config.nz ? "" : "-DATOMIC_INC_NZ", 0 == new_config.al ? "" : "-DAL", - 0 == new_config.ap ? "" : "-DSLM_P", - 0 == new_config.aa ? "" : (1 == slm_a ? "-DSLM_A=1" : (0 != slm_a ? "-DSLM_A=2" : "-DREG_A")), - 0 == new_config.ab ? "" : (1 == slm_b ? "-DSLM_B=1" : (0 != slm_b ? "-DSLM_B=2" : "-DREG_B")), - 0 == new_config.ac ? "" : (1 == slm_c ? "-DSLM_C=1" : "-DSLM_C=2")); - /* apply support for FP-atomics */ - if (0 < nchar && (int)sizeof(build_params) > nchar) { - nchar = c_dbcsr_acc_opencl_flags_atomics(&c_dbcsr_acc_opencl_config.device, tkind, extensions, - sizeof(extensions) / sizeof(*extensions), build_params + nchar, sizeof(build_params) - nchar); - } - else result = EXIT_FAILURE; - if (0 < nchar && (int)sizeof(build_params) > nchar) { - const char* const cl_debug = ((0 != c_dbcsr_acc_opencl_config.debug && - 0 != c_dbcsr_acc_opencl_config.device.intel && - CL_DEVICE_TYPE_CPU != c_dbcsr_acc_opencl_config.device.type) - ? "-gline-tables-only" - : ""); - nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s %s %s %s", - (0 == new_config.flags || 0 == c_dbcsr_acc_opencl_config.device.intel || - CL_DEVICE_TYPE_GPU != c_dbcsr_acc_opencl_config.device.type) - ? "" - : intel_xf, - cl_debug, 0 == c_dbcsr_acc_opencl_config.debug ? "-cl-fast-relaxed-math -cl-denorms-are-zero" : "", - NULL == env_cl ? "" : env_cl); - if (0 >= nchar || (int)sizeof(buffer) <= nchar) result = EXIT_FAILURE; - } - else result = EXIT_FAILURE; + else result = EXIT_FAILURE; + if (0 < nchar && (int)sizeof(build_params) > nchar) { + const char* const cl_debug = ((0 != c_dbcsr_acc_opencl_config.debug && + 0 != c_dbcsr_acc_opencl_config.device.intel && + CL_DEVICE_TYPE_CPU != c_dbcsr_acc_opencl_config.device.type) + ? "-gline-tables-only" + : ""); + nchar = LIBXSMM_SNPRINTF(buffer, sizeof(buffer), "%s %s %s %s", + (0 == new_config.flags || 0 == c_dbcsr_acc_opencl_config.device.intel || + CL_DEVICE_TYPE_GPU != c_dbcsr_acc_opencl_config.device.type) + ? "" + : intel_xf, + cl_debug, 0 == c_dbcsr_acc_opencl_config.debug ? "-cl-fast-relaxed-math -cl-denorms-are-zero" : "", + NULL == env_cl ? "" : env_cl); + if (0 >= nchar || (int)sizeof(buffer) <= nchar) result = EXIT_FAILURE; } - /* matrix-size causes too large WG-size */ else result = EXIT_FAILURE; } + else { /* matrix-size causes too large WG-size */ + result = EXIT_FAILURE; + } if (EXIT_SUCCESS == result) { const char* const env_kernel = getenv("OPENCL_LIBSMM_SMM_KERNEL"); result = c_dbcsr_acc_opencl_kernel(NULL == env_kernel ? 0 : 1, NULL == env_kernel ? OPENCL_KERNELS_SOURCE_MULTIPLY : env_kernel, fname, build_params, buffer, NULL /*cl_try*/, - NULL /*cl_try_ok*/, extensions, sizeof(extensions) / sizeof(*extensions), new_config.kernel + kernel_idx); + NULL /*cl_try_ok*/, extensions, nextensions, new_config.kernel + kernel_idx); if (EXIT_SUCCESS == result) { - size_t wgsize_max_kernel = wgsize_max; - result = c_dbcsr_acc_opencl_wgsize( - active_device, new_config.kernel[kernel_idx], &wgsize_max_kernel, NULL /*prefmult*/); + size_t wgsize_max_kernel = c_dbcsr_acc_opencl_config.device.wgsize[0]; + result = clGetKernelWorkGroupInfo(new_config.kernel[kernel_idx], c_dbcsr_acc_opencl_config.device.id, + CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &wgsize_max_kernel, NULL); if (EXIT_SUCCESS == result) { - assert(0 < new_config.wgsize[kernel_idx] && 0 < wgsize_max && 0 < wgsize_max_kernel); - assert(wgsize_max_kernel <= wgsize_max); + assert(0 < new_config.wgsize[kernel_idx] && 0 < wgsize_max_kernel); + assert(wgsize_max_kernel <= c_dbcsr_acc_opencl_config.device.wgsize[0]); if (new_config.wgsize[kernel_idx] <= wgsize_max_kernel) { /* check planned WG-size vs kernel-specific WG-size */ if (NULL == config || NULL == config->kernel[kernel_idx]) { config = (opencl_libsmm_smm_t*)libxsmm_xregister(&key, sizeof(key), sizeof(new_config), &new_config); @@ -1324,7 +1282,8 @@ int libsmm_acc_process(const int* host_param_stack, const int* dev_param_stack, else { if (0 != c_dbcsr_acc_opencl_config.verbosity) { fprintf(stderr, "ERROR LIBSMM: tile-size causes too large WG-size (min(%u,%u) < %u)!\n", - (unsigned int)wgsize_max_kernel, (unsigned int)wgsize_max, (unsigned int)new_config.wgsize[kernel_idx]); + (unsigned int)wgsize_max_kernel, (unsigned int)c_dbcsr_acc_opencl_config.device.wgsize[0], + (unsigned int)new_config.wgsize[kernel_idx]); } result = EXIT_FAILURE; /* tile-size causes too large WG-size */ } diff --git a/src/acc/opencl/smm/opencl_libsmm.h b/src/acc/opencl/smm/opencl_libsmm.h index 8a354ca78ec..8e03b2e4565 100644 --- a/src/acc/opencl/smm/opencl_libsmm.h +++ b/src/acc/opencl/smm/opencl_libsmm.h @@ -4,7 +4,7 @@ /* */ /* For information on the license, see the LICENSE file. */ /* For further information please visit https://dbcsr.cp2k.org */ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: BSD-3-Clause */ /*------------------------------------------------------------------------------------------------*/ #ifndef OPENCL_LIBSMM_H #define OPENCL_LIBSMM_H diff --git a/src/acc/opencl/smm/params/tune_multiply_PVC.csv b/src/acc/opencl/smm/params/tune_multiply_PVC.csv index b98cde99aab..604952940e9 100644 --- a/src/acc/opencl/smm/params/tune_multiply_PVC.csv +++ b/src/acc/opencl/smm/params/tune_multiply_PVC.csv @@ -1,1157 +1,1157 @@ DEVICE;TYPEID;M;N;K;S;GFLOPS;BS;BM;BN;BK;WS;WG;LU;NZ;AL;TB;TC;AP;AA;AB;AC -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;2;2;2;30000;0;4;2;1;1;1;-2;-1;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;3;3;1;30000;0;6;3;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;3;3;3;30000;0;5;3;1;2;1;-2;-2;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;4;30000;0;5;4;1;2;1;-1;-1;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;5;30000;0;10;4;1;4;1;-2;-1;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;7;30000;0;10;4;1;2;1;-2;0;0;0;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;9;30000;0;9;4;1;1;1;-2;0;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;10;30000;0;9;4;1;4;1;-1;-1;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;13;30000;0;8;4;1;1;1;-2;-1;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;15;30000;0;8;4;1;1;1;-1;-2;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;17;30000;0;8;4;1;2;1;-2;5;0;1;0;1;0;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;25;30000;0;8;4;1;1;1;-2;0;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;26;30000;0;8;4;1;1;1;-1;0;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;28;30000;0;8;4;1;1;1;-2;-2;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;32;30000;0;8;4;1;1;1;-1;-1;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;45;30000;0;8;4;1;1;4;-1;-2;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;4;30000;0;10;4;1;3;1;-2;-1;0;0;1;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;5;30000;0;11;4;1;2;1;-2;4;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;7;30000;0;11;4;1;2;1;-2;0;0;0;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;9;30000;0;9;4;1;4;1;-2;-1;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;13;30000;0;8;4;1;1;1;-1;-1;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;17;30000;0;8;4;1;1;1;-2;0;1;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;25;30000;0;8;4;1;1;1;-1;-1;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;26;30000;0;8;4;1;1;5;-1;0;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;28;30000;0;8;4;1;1;5;0;-1;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;32;30000;0;8;4;1;1;1;0;-2;0;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;45;30000;0;8;4;1;1;5;-1;-1;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;4;30000;0;11;4;1;4;1;-2;-1;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;5;30000;0;11;4;1;4;1;-2;0;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;7;30000;0;12;4;1;2;1;-2;0;0;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;9;30000;0;9;4;1;1;1;-1;0;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;13;30000;0;8;4;1;1;1;-1;-2;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;25;30000;0;8;4;1;1;7;-2;0;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;26;30000;0;8;4;1;1;7;-1;0;0;0;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;2;2;2;30000;0;8;2;1;1;1;-1;0;0;1;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;3;3;1;30000;0;8;3;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;3;3;3;30000;0;8;3;1;1;1;-1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;4;30000;0;10;4;1;4;1;1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;5;30000;0;10;4;1;3;1;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;7;30000;0;9;4;1;3;1;1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;9;30000;0;8;4;1;1;1;-1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;10;30000;0;8;4;1;2;1;1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;13;30000;0;8;4;1;1;1;1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;15;30000;0;8;4;1;1;1;0;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;17;30000;0;8;4;1;1;1;-2;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;25;30000;0;8;4;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;26;30000;0;8;4;1;1;1;-2;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;28;30000;0;8;4;1;1;1;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;32;30000;0;8;4;1;1;1;-1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;4;45;30000;0;8;4;1;1;4;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;4;30000;0;10;4;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;5;30000;0;10;4;1;3;1;0;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;7;30000;0;8;4;1;2;1;-1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;9;30000;0;8;4;1;1;1;1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;13;30000;0;8;4;1;1;1;-2;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;17;30000;0;8;4;1;1;1;1;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;25;30000;0;8;4;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;26;30000;0;8;4;1;1;5;-2;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;28;30000;0;8;4;1;1;5;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;32;30000;0;8;4;1;1;1;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;5;45;30000;0;8;4;1;1;5;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;4;30000;0;10;4;1;3;1;-1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;5;30000;0;10;4;1;1;1;-1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;7;30000;0;8;4;1;2;1;-1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;9;30000;0;8;4;1;1;1;-1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;13;30000;0;8;4;1;1;1;-2;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;25;30000;0;8;4;1;1;7;1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;26;30000;0;8;4;1;1;7;-1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;28;30000;0;8;4;1;1;7;-1;-2;0;0;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;32;30000;0;8;4;1;1;7;-1;-1;0;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;45;30000;0;8;4;1;1;7;-2;-2;0;1;1;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;4;30000;0;16;4;1;2;1;1;0;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;5;30000;0;14;4;1;2;1;-1;-1;0;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;7;30000;0;11;4;1;1;1;-1;-2;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;9;30000;0;9;4;1;1;1;-2;-2;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;13;30000;0;8;4;1;1;1;-1;-1;0;0;0;1;1;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;7;45;30000;0;8;4;1;1;7;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;4;30000;0;12;4;1;1;1;-1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;5;30000;0;14;4;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;7;30000;0;10;4;1;2;1;-2;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;9;30000;0;8;4;1;4;1;-1;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;13;30000;0;8;4;1;1;1;-2;-2;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;25;30000;0;8;4;1;1;9;-1;0;0;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;26;30000;0;8;4;1;1;9;-1;-2;0;0;0;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;28;30000;0;8;4;1;1;9;-1;-1;0;1;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;32;30000;0;8;4;1;1;9;-1;0;0;0;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;9;45;30000;0;4;4;1;1;9;-1;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;4;30000;0;12;4;1;1;1;-1;-1;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;10;30000;0;9;4;1;1;1;-1;-2;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;15;30000;0;8;4;1;1;10;-1;-2;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;4;30000;0;16;4;1;2;1;0;0;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;5;30000;0;14;4;1;4;1;-1;-2;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;7;30000;0;11;4;1;2;1;-1;-1;0;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;9;30000;0;8;4;1;4;1;-2;-2;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;13;30000;0;8;4;1;1;1;-1;-2;0;1;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;4;30000;0;13;4;1;3;1;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;10;30000;0;8;4;1;2;1;0;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;10;15;30000;0;8;4;1;1;10;1;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;4;30000;0;13;4;1;4;1;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;5;30000;0;14;4;1;4;1;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;7;30000;0;14;4;1;2;1;-2;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;9;30000;0;14;4;1;1;1;1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;13;30000;0;8;4;1;1;1;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;17;30000;0;8;4;1;1;1;-1;-2;1;0;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;25;30000;0;8;4;1;1;13;-1;0;0;0;0;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;26;30000;0;8;4;1;1;13;-2;-1;0;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;28;30000;0;8;4;1;2;13;-2;1;0;1;0;1;1;2;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;28;30000;0;8;4;1;1;13;-2;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;32;30000;0;8;4;1;1;1;-2;0;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;45;30000;0;4;4;1;1;13;-1;0;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;4;30000;0;16;4;1;1;1;-2;-2;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;10;30000;0;8;4;1;1;15;-1;0;0;1;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;13;45;30000;0;4;4;1;1;13;-2;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;4;30000;0;14;4;1;2;1;-2;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;10;30000;0;10;4;1;3;15;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;15;15;30000;0;8;4;1;1;15;-1;-1;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;4;30000;0;17;4;1;2;1;1;-2;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;5;30000;0;14;4;1;3;1;1;-1;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;13;30000;0;8;4;1;2;1;1;5;0;0;0;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;4;30000;0;14;4;1;4;1;0;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;5;30000;0;14;4;1;1;1;0;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;13;30000;0;8;4;1;1;1;0;3;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;17;30000;0;8;4;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;17;32;30000;0;8;4;1;1;1;1;0;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;4;30000;0;17;4;1;3;1;-2;-1;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;5;30000;0;14;4;1;4;1;0;0;0;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;7;30000;0;8;4;1;3;25;-1;-2;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;9;30000;0;8;4;1;1;25;-2;0;1;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;13;30000;0;9;4;1;1;25;-1;0;0;1;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;4;30000;0;14;4;1;3;1;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;5;30000;0;14;4;1;4;1;1;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;7;30000;0;14;4;1;3;25;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;9;30000;0;10;4;1;1;25;0;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;13;30000;0;8;4;1;1;25;-1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;25;30000;0;8;4;1;1;25;-2;0;0;1;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;26;30000;0;8;4;1;1;25;-2;0;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;28;30000;0;8;4;1;1;25;-1;0;0;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;28;30000;0;8;4;1;1;25;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;32;30000;0;8;4;1;1;25;1;-2;0;0;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;25;45;30000;0;8;4;1;1;25;-1;0;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;4;30000;0;17;4;1;4;1;-2;0;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;5;30000;0;14;4;1;2;26;-1;3;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;7;30000;0;8;4;1;3;26;-1;-1;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;9;30000;0;8;4;1;1;26;0;-2;1;0;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;4;30000;0;15;4;1;3;1;-1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;5;30000;0;15;4;1;2;26;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;7;30000;0;14;4;1;1;26;0;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;9;30000;0;10;4;1;3;26;1;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;13;30000;0;8;4;1;1;26;1;0;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;25;30000;0;8;4;1;1;26;-2;4;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;25;30000;0;8;4;1;1;26;-1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;26;30000;0;8;4;1;1;26;-2;-1;0;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;28;30000;0;8;4;1;1;26;0;-2;1;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;32;30000;0;8;4;1;1;26;-2;-1;1;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;26;45;30000;0;8;4;1;1;26;0;0;0;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;4;30000;0;17;4;1;2;1;-2;-1;1;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;5;30000;0;17;4;1;4;28;-1;-2;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;7;30000;0;8;4;1;3;28;-1;-2;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;9;30000;0;8;4;1;1;28;-1;0;0;0;0;1;1;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;4;30000;0;15;4;1;2;1;-2;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;5;30000;0;14;4;1;2;28;-2;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;7;30000;0;14;4;1;4;28;1;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;9;30000;0;14;4;1;3;28;1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;13;30000;0;8;4;1;1;28;0;-2;1;0;0;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;25;30000;0;8;4;1;1;28;0;0;0;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;26;30000;0;8;4;1;1;28;0;-1;1;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;26;30000;0;8;4;1;1;28;0;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;28;30000;0;8;4;1;1;28;0;-2;1;1;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;32;30000;0;8;4;1;1;28;1;-2;1;1;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;28;45;30000;0;8;4;1;1;28;0;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;4;30000;0;20;4;1;2;1;0;-1;1;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;5;30000;0;22;4;1;1;1;0;-1;1;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;7;30000;0;21;4;1;4;32;-1;0;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;9;30000;0;8;4;1;1;32;1;-1;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;13;30000;0;8;4;1;1;1;-1;0;1;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;4;30000;0;17;4;1;3;1;0;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;5;30000;0;16;4;1;2;1;0;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;7;30000;0;15;4;1;2;32;1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;9;30000;0;15;4;1;2;32;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;13;30000;0;15;4;1;1;1;-2;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;17;30000;0;8;4;1;1;1;-2;0;0;1;1;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;25;30000;0;8;4;1;1;32;1;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;26;30000;0;8;4;1;1;32;1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;26;30000;0;8;4;1;1;32;0;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;28;30000;0;8;4;1;1;32;0;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;32;30000;0;8;4;1;1;1;0;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;32;45;30000;0;4;4;1;1;32;-1;-2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;4;30000;0;15;4;1;2;45;-1;-2;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;5;30000;0;15;4;1;4;45;-2;-2;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;7;30000;0;10;4;1;2;45;0;3;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;9;30000;0;15;4;1;2;45;1;-1;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;13;30000;0;6;4;1;1;45;1;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;4;30000;0;15;4;1;4;45;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;5;30000;0;15;4;1;1;45;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;7;30000;0;15;4;1;2;45;-2;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;9;30000;0;15;4;1;3;45;1;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;13;30000;0;6;4;1;1;45;1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;25;30000;0;4;4;1;1;45;-1;6;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;26;30000;0;4;4;1;1;45;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;28;30000;0;4;4;1;1;45;0;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;32;30000;0;4;4;1;1;45;-1;5;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;4;45;45;30000;0;3;4;1;1;45;-2;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;4;30000;0;12;5;1;1;1;-1;-1;0;0;1;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;5;30000;0;13;5;1;1;1;-1;-1;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;7;30000;0;12;5;1;1;1;-1;-2;0;0;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;9;30000;0;11;5;1;1;1;-2;0;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;13;30000;0;9;5;1;1;1;-2;-1;1;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;17;30000;0;8;5;1;1;1;-1;-1;1;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;25;30000;0;8;5;1;1;1;-2;0;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;26;30000;0;8;5;1;1;5;-1;-1;0;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;28;30000;0;8;5;1;1;5;-1;-1;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;32;30000;0;8;5;1;1;1;-2;-2;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;45;30000;0;8;5;1;1;5;-2;-1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;4;30000;0;13;5;1;1;1;-2;-1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;5;30000;0;12;5;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;7;30000;0;11;5;1;2;1;0;3;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;9;30000;0;11;5;1;1;1;-2;6;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;13;30000;0;8;5;1;1;1;-2;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;16;30000;0;8;5;1;1;1;-2;-1;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;17;30000;0;8;5;1;1;1;-2;-2;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;24;30000;0;8;5;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;26;30000;0;8;5;1;1;1;-1;-2;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;28;30000;0;8;5;1;1;5;-1;-2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;32;30000;0;8;5;1;1;1;-2;-2;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;4;30000;0;13;5;1;1;1;-1;0;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;5;30000;0;12;5;1;1;1;-1;-1;0;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;7;30000;0;11;5;1;1;1;-1;0;0;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;9;30000;0;11;5;1;1;1;-2;-2;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;13;30000;0;8;5;1;1;1;-2;-2;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;4;30000;0;17;5;1;4;1;-1;0;1;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;5;30000;0;16;5;1;1;1;-1;-2;0;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;7;30000;0;12;5;1;1;1;1;-1;0;0;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;9;30000;0;11;5;1;1;1;-1;-1;0;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;4;30000;0;16;5;1;1;1;-2;-2;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;5;30000;0;17;5;1;1;1;-1;-2;1;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;7;30000;0;14;5;1;1;1;-1;0;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;13;30000;0;8;5;1;1;1;-1;-2;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;16;30000;0;8;5;1;1;1;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;4;30000;0;12;5;1;1;1;-1;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;5;30000;0;12;5;1;1;1;1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;7;30000;0;8;5;1;1;1;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;9;30000;0;8;5;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;13;30000;0;8;5;1;1;1;0;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;17;30000;0;8;5;1;1;1;1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;25;30000;0;8;5;1;1;1;-2;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;26;30000;0;8;5;1;1;5;-2;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;28;30000;0;8;5;1;1;5;-2;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;32;30000;0;8;5;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;4;45;30000;0;8;5;1;1;5;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;4;30000;0;12;5;1;1;1;1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;5;30000;0;12;5;1;1;1;1;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;7;30000;0;10;5;1;1;1;-1;2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;9;30000;0;8;5;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;13;30000;0;8;5;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;16;30000;0;8;5;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;17;30000;0;8;5;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;24;30000;0;8;5;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;26;30000;0;8;5;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;28;30000;0;8;5;1;1;5;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;5;32;30000;0;8;5;1;1;1;-2;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;4;30000;0;12;5;1;1;1;-2;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;5;30000;0;12;5;1;1;1;-1;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;7;30000;0;10;5;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;9;30000;0;8;5;1;1;1;-1;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;7;13;30000;0;8;5;1;1;1;-2;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;4;30000;0;16;5;1;5;1;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;5;30000;0;16;5;1;1;1;-2;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;7;30000;0;13;5;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;9;9;30000;0;14;5;1;1;1;-1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;4;30000;0;16;5;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;5;30000;0;16;5;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;7;30000;0;14;5;1;1;1;-1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;13;30000;0;10;5;1;1;1;1;0;0;1;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;16;30000;0;8;5;1;1;1;-2;-1;1;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;17;30000;0;8;5;1;1;1;-1;-1;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;24;30000;0;8;5;1;1;1;-2;4;1;1;0;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;26;30000;0;8;5;1;1;1;-1;3;0;0;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;32;30000;0;8;5;1;1;1;-1;-2;0;0;0;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;13;45;30000;0;8;5;1;1;13;-1;0;0;1;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;14;28;30000;0;8;5;1;1;14;-2;-2;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;5;30000;0;16;5;1;1;1;-2;-2;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;13;30000;0;8;5;1;1;1;-2;0;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;16;30000;0;8;5;1;1;1;-2;-1;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;24;30000;0;8;5;1;1;1;-2;-2;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;26;30000;0;8;5;1;1;1;-2;-1;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;4;30000;0;18;5;1;1;1;1;-1;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;5;30000;0;17;5;1;1;1;-1;0;0;1;1;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;5;30000;0;16;5;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;13;30000;0;14;5;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;16;30000;0;15;5;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;24;30000;0;8;5;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;16;26;30000;0;8;5;1;1;1;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;4;30000;0;16;5;1;1;1;0;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;5;30000;0;16;5;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;13;30000;0;8;5;1;1;1;-2;0;1;0;0;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;17;30000;0;8;5;1;1;1;-1;-2;0;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;17;32;30000;0;8;5;1;1;1;-1;-2;0;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;5;30000;0;22;5;1;1;1;-2;0;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;13;30000;0;17;5;1;1;1;-1;-2;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;16;30000;0;17;5;1;1;1;-1;2;1;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;24;30000;0;8;5;1;1;24;-1;0;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;26;30000;0;8;5;1;1;24;-2;0;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;32;30000;0;8;5;1;1;24;0;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;4;30000;0;17;5;1;3;1;0;0;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;5;30000;0;21;5;1;1;25;1;0;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;7;30000;0;14;5;1;1;25;-2;-1;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;9;30000;0;8;5;1;1;25;-1;-2;1;0;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;5;30000;0;16;5;1;1;1;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;13;30000;0;15;5;1;1;1;0;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;16;30000;0;15;5;1;1;1;-1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;24;30000;0;14;5;1;1;24;0;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;26;30000;0;15;5;1;1;24;-2;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;24;32;30000;0;8;5;1;1;24;0;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;4;30000;0;18;5;1;1;1;0;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;5;30000;0;18;5;1;1;25;-1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;7;30000;0;15;5;1;1;25;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;9;30000;0;14;5;1;1;25;0;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;13;30000;0;8;5;1;1;25;0;-1;0;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;25;30000;0;8;5;1;1;25;0;-1;1;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;26;30000;0;8;5;1;1;25;-2;-2;0;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;28;30000;0;8;5;1;1;25;-1;0;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;32;30000;0;8;5;1;1;25;-1;-2;0;1;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;32;30000;0;8;5;1;1;25;0;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;25;45;30000;0;8;5;1;1;25;-1;0;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;4;30000;0;22;5;1;1;26;1;-2;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;5;30000;0;21;5;1;1;1;1;0;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;7;30000;0;17;5;1;1;26;-1;0;1;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;9;30000;0;8;5;1;4;26;-2;-2;1;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;4;30000;0;18;5;1;1;26;-2;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;5;30000;0;18;5;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;7;30000;0;14;5;1;1;26;1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;9;30000;0;14;5;1;1;26;1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;13;30000;0;8;5;1;1;1;1;0;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;16;30000;0;8;5;1;1;1;-2;-1;0;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;24;30000;0;8;5;1;1;26;-1;-2;0;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;24;30000;0;8;5;1;1;26;-1;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;25;30000;0;8;5;1;1;26;-2;-1;0;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;26;30000;0;8;5;1;1;26;-1;-2;1;1;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;28;30000;0;8;5;1;1;26;0;-2;1;0;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;32;30000;0;8;5;1;1;26;-1;0;0;0;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;26;45;30000;0;8;5;1;1;26;-2;0;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;4;30000;0;22;5;1;1;28;1;-1;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;5;30000;0;22;5;1;1;28;-2;0;0;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;7;30000;0;17;5;1;1;28;0;-1;1;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;9;30000;0;17;5;1;1;28;1;-1;1;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;13;30000;0;8;5;1;1;28;-1;-1;0;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;14;30000;0;8;5;1;1;28;-1;-1;1;1;0;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;4;30000;0;16;5;1;1;28;-2;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;5;30000;0;17;5;1;1;28;1;1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;7;30000;0;15;5;1;1;28;-1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;9;30000;0;15;5;1;1;28;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;13;30000;0;14;5;1;1;28;-2;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;14;30000;0;10;5;1;1;28;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;25;30000;0;8;5;1;1;28;-1;0;0;1;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;26;30000;0;8;5;1;1;28;0;-2;0;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;28;30000;0;8;5;1;1;28;-2;0;1;1;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;32;30000;0;8;5;1;1;28;-2;-2;1;1;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;28;45;30000;0;8;5;1;1;28;1;-2;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;4;30000;0;22;5;1;1;1;0;-2;1;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;5;30000;0;22;5;1;1;1;-1;-2;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;7;30000;0;22;5;1;1;32;-2;-2;1;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;9;30000;0;22;5;1;1;32;0;-1;1;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;13;30000;0;8;5;1;1;1;-2;0;0;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;4;30000;0;18;5;1;5;1;0;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;5;30000;0;17;5;1;1;1;1;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;7;30000;0;15;5;1;1;32;-2;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;9;30000;0;15;5;1;1;32;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;13;30000;0;18;5;1;1;1;1;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;17;30000;0;8;5;1;1;1;-1;-2;0;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;24;30000;0;8;5;1;1;32;-1;0;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;25;30000;0;8;5;1;1;32;-1;2;0;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;25;30000;0;8;5;1;1;32;-1;2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;26;30000;0;8;5;1;1;32;-1;0;0;0;1;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;28;30000;0;8;5;1;1;32;-1;-1;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;32;30000;0;8;5;1;1;1;-1;0;0;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;32;30000;0;8;5;1;1;1;1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;32;45;30000;0;8;5;1;1;32;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;4;30000;0;17;5;1;3;45;-1;-2;1;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;5;30000;0;17;5;1;2;45;1;2;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;7;30000;0;15;5;1;2;45;-1;4;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;9;30000;0;15;5;1;4;45;-2;-1;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;13;30000;0;8;5;1;3;45;-2;-2;0;1;1;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;5;30000;0;15;5;1;5;45;0;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;7;30000;0;15;5;1;4;45;-1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;9;30000;0;15;5;1;3;45;1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;13;30000;0;8;5;1;3;45;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;25;30000;0;5;5;1;1;45;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;26;30000;0;6;5;1;1;45;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;28;30000;0;5;5;1;1;45;-1;-2;1;0;1;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;32;30000;0;4;5;1;1;45;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;5;45;45;30000;0;9;5;1;1;45;-2;-1;0;0;0;1;1;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;6;30000;0;9;6;1;3;1;-2;0;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;7;30000;0;10;6;1;1;1;-1;-1;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;8;30000;0;12;6;1;1;1;-1;-1;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;6;30000;0;14;6;1;1;1;-2;-2;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;7;30000;0;11;6;1;1;1;-2;0;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;8;30000;0;11;6;1;1;1;-1;-1;0;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;6;30000;0;16;6;1;3;1;-2;2;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;7;30000;0;16;6;1;1;1;1;0;0;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;8;30000;0;16;6;1;1;1;-1;-2;0;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;4;30000;0;16;7;1;1;1;-1;-2;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;5;30000;0;16;7;1;6;1;-2;-2;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;7;30000;0;10;7;1;1;1;-1;-2;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;9;30000;0;12;7;1;2;1;-2;1;0;1;1;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;13;30000;0;9;7;1;1;1;-1;0;0;1;0;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;25;30000;0;8;7;1;1;7;1;-2;1;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;26;30000;0;8;7;1;1;7;0;-2;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;28;30000;0;8;7;1;1;7;1;-2;0;1;0;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;7;30000;0;10;6;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;6;8;30000;0;10;6;1;1;1;-1;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;6;30000;0;14;6;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;7;30000;0;10;6;1;1;1;-2;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;7;8;30000;0;11;6;1;1;1;1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;6;30000;0;16;6;1;1;1;-1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;7;30000;0;14;6;1;1;1;-1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;6;8;8;30000;0;13;6;1;1;1;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;4;30000;0;14;7;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;5;30000;0;14;7;1;3;1;1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;7;30000;0;11;7;1;1;1;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;9;30000;0;10;7;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;13;30000;0;8;7;1;1;1;-1;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;25;30000;0;8;7;1;1;7;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;26;30000;0;8;7;1;1;7;-2;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;28;30000;0;8;7;1;1;7;-1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;32;30000;0;8;7;1;1;7;1;0;0;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;4;45;30000;0;8;7;1;1;7;1;0;0;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;4;30000;0;16;7;1;3;1;-1;4;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;5;30000;0;16;7;1;1;1;-2;0;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;7;30000;0;13;7;1;1;1;-2;0;0;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;9;30000;0;11;7;1;2;1;-1;2;0;1;0;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;13;30000;0;11;7;1;1;1;0;0;0;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;25;30000;0;8;7;1;1;7;-2;-2;1;0;0;1;1;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;4;30000;0;14;7;1;1;1;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;5;30000;0;16;7;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;7;30000;0;10;7;1;1;1;-1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;9;30000;0;14;7;1;1;1;-2;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;13;30000;0;10;7;1;1;1;-1;-2;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;25;30000;0;8;7;1;1;7;1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;26;30000;0;8;7;1;1;7;1;0;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;28;30000;0;8;7;1;1;7;-2;0;1;0;0;1;1;2;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;28;30000;0;8;7;1;1;7;-2;-2;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;32;30000;0;8;7;1;1;7;-1;0;1;1;0;1;1;2;2;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;5;45;30000;0;8;7;1;1;7;-2;0;0;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;6;30000;0;16;7;1;1;1;-1;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;7;30000;0;11;7;1;7;1;-2;0;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;8;30000;0;12;7;1;6;1;-1;-2;0;0;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;4;30000;0;16;7;1;1;1;-1;0;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;5;30000;0;17;7;1;1;1;-1;0;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;6;30000;0;16;7;1;1;1;-2;-2;1;1;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;6;30000;0;13;7;1;1;1;1;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;7;30000;0;13;7;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;6;8;30000;0;10;7;1;1;1;1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;4;30000;0;13;7;1;1;1;-1;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;5;30000;0;16;7;1;1;1;-1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;6;30000;0;16;7;1;1;1;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;7;30000;0;9;7;1;2;1;1;-2;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;8;30000;0;11;7;1;1;1;-2;-1;1;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;9;30000;0;14;7;1;1;1;-2;-1;0;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;13;30000;0;12;7;1;1;1;-2;-1;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;25;30000;0;8;7;1;1;7;-1;-2;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;26;30000;0;8;7;1;1;7;-1;-2;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;28;30000;0;8;7;1;1;7;-1;-2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;32;30000;0;8;7;1;1;7;-1;0;1;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;8;30000;0;14;7;1;1;1;1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;9;30000;0;11;7;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;13;30000;0;10;7;1;1;1;-1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;25;30000;0;10;7;1;1;7;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;26;30000;0;10;7;1;1;7;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;28;30000;0;8;7;1;1;7;1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;32;30000;0;8;7;1;1;7;1;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;7;45;30000;0;8;7;1;1;7;-1;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;6;30000;0;16;7;1;1;1;-2;-2;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;7;30000;0;16;7;1;1;1;-2;0;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;8;30000;0;16;7;1;2;1;-1;-1;1;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;4;30000;0;16;7;1;1;1;-1;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;5;30000;0;18;7;1;1;1;-1;-2;0;0;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;6;30000;0;16;7;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;7;30000;0;14;7;1;1;1;1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;8;8;30000;0;13;7;1;1;1;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;4;30000;0;16;7;1;1;1;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;5;30000;0;16;7;1;1;1;-2;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;7;30000;0;17;7;1;1;1;-1;0;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;9;30000;0;17;7;1;2;9;-2;5;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;13;30000;0;9;7;1;1;9;-1;-2;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;25;30000;0;9;7;1;3;9;-1;-2;1;1;1;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;26;30000;0;8;7;1;5;9;-1;-1;0;1;0;1;1;2;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;9;30000;0;14;7;1;1;9;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;13;30000;0;11;7;1;6;9;-2;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;25;30000;0;11;7;1;2;9;-1;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;26;30000;0;11;7;1;6;9;1;-1;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;28;30000;0;8;7;1;1;9;-1;-2;1;0;0;1;1;2;2;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;32;30000;0;8;7;1;1;9;-1;-2;1;1;0;1;1;0;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;9;45;30000;0;8;7;1;1;9;1;0;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;4;30000;0;20;7;1;1;1;-2;-1;0;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;5;30000;0;17;7;1;2;1;-2;1;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;7;30000;0;14;7;1;1;1;-2;0;1;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;13;30000;0;9;7;1;1;1;-2;-2;1;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;13;30000;0;21;7;1;5;32;0;-2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;25;30000;0;8;7;1;1;32;0;-1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;26;30000;0;8;7;1;1;32;-1;-2;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;28;30000;0;8;7;1;1;32;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;4;30000;0;16;7;1;4;1;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;5;30000;0;16;7;1;5;1;1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;7;30000;0;14;7;1;1;1;0;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;13;13;30000;0;12;7;1;2;1;1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;13;30000;0;15;7;1;3;32;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;25;30000;0;15;7;1;1;32;1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;26;30000;0;15;7;1;1;32;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;28;30000;0;15;7;1;1;32;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;32;30000;0;8;7;1;1;32;0;0;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;45;30000;0;15;7;1;1;32;1;0;1;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;4;30000;0;42;7;1;1;45;-2;-1;1;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;5;30000;0;55;7;1;3;45;-2;-1;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;7;30000;0;15;7;1;3;45;1;-1;1;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;9;30000;0;41;7;1;5;45;0;-2;0;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;13;30000;0;15;7;1;3;45;-1;5;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;25;30000;0;15;7;1;1;45;1;0;1;1;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;32;45;30000;0;15;7;1;1;32;1;1;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;4;30000;0;41;7;1;4;45;1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;5;30000;0;43;7;1;7;45;1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;7;30000;0;41;7;1;1;45;0;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;9;30000;0;41;7;1;1;45;1;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;13;30000;0;15;7;1;1;45;-1;4;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;25;30000;0;41;7;1;1;45;1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;26;30000;0;10;7;1;1;45;0;-2;0;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;28;30000;0;11;7;1;1;45;-1;-2;1;0;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;28;30000;0;8;7;1;1;45;1;-1;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;32;30000;0;8;7;1;1;45;-2;0;1;0;1;1;1;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;7;45;45;30000;0;9;7;1;1;45;1;0;1;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;6;30000;0;16;8;1;6;1;-1;-1;0;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;7;30000;0;13;8;1;4;1;0;-2;0;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;8;30000;0;11;8;1;5;1;-2;-2;1;0;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;6;30000;0;16;8;1;4;1;-2;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;7;30000;0;16;8;1;4;1;-2;-2;0;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;8;30000;0;16;8;1;1;1;-2;3;0;0;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;6;30000;0;19;8;1;1;1;-2;2;0;1;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;7;30000;0;16;8;1;1;1;-1;0;0;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;6;30000;0;16;8;1;1;1;-1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;7;30000;0;13;8;1;7;1;0;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;6;8;30000;0;10;8;1;8;1;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;6;30000;0;16;8;1;7;1;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;7;30000;0;13;8;1;2;1;0;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;7;8;30000;0;14;8;1;7;1;-2;-2;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;6;30000;0;16;8;1;1;1;-2;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;7;30000;0;16;8;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;8;8;8;30000;0;4;8;1;2;1;-1;-1;0;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;4;30000;0;12;1;4;9;1;-1;-1;0;1;0;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;4;30000;0;8;1;4;9;1;-1;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;5;30000;0;16;9;1;1;1;0;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;7;30000;0;16;9;1;1;1;-1;0;0;0;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;9;30000;0;10;9;1;6;1;-1;-2;0;1;0;1;0;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;13;30000;0;8;9;1;1;1;-1;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;9;30000;0;13;9;1;1;1;-2;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;13;30000;0;8;9;1;1;1;-1;-1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;25;30000;0;8;9;1;1;9;-1;-1;0;0;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;26;30000;0;8;9;1;1;9;-1;0;0;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;28;30000;0;8;9;1;1;9;-1;-2;0;1;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;26;30000;0;8;9;1;1;9;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;28;30000;0;8;9;1;1;9;-2;-1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;32;30000;0;8;9;1;1;9;-1;0;0;1;1;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;4;45;30000;0;8;9;1;1;9;-1;0;0;0;0;1;1;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;4;30000;0;16;9;1;1;1;-1;-2;0;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;5;30000;0;16;9;1;1;1;0;-2;0;1;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;4;30000;0;16;9;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;5;30000;0;16;9;1;1;1;0;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;7;30000;0;16;9;1;1;1;-2;-2;1;0;1;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;9;30000;0;11;9;1;1;1;-1;-1;1;0;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;13;30000;0;11;9;1;1;9;-1;0;0;1;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;25;30000;0;8;9;1;1;9;-1;0;1;0;0;1;1;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;13;30000;0;10;9;1;1;9;-1;1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;25;30000;0;8;9;1;1;9;-2;0;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;26;30000;0;8;9;1;3;9;-1;1;0;0;0;1;1;0;2;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;28;30000;0;8;9;1;1;9;-1;0;0;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;32;30000;0;8;9;1;1;9;-1;-2;0;0;1;1;1;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;32;30000;0;8;9;1;1;9;-1;1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;5;45;30000;0;8;9;1;1;9;-1;0;0;1;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;4;30000;0;17;9;1;1;1;-1;-1;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;5;30000;0;16;9;1;1;1;1;-2;0;1;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;4;30000;0;16;9;1;1;1;1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;5;30000;0;16;9;1;1;1;0;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;7;30000;0;14;9;1;1;1;-2;0;0;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;9;30000;0;11;9;1;5;9;1;-1;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;13;30000;0;9;9;1;5;9;-1;0;0;1;1;1;1;0;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;9;30000;0;14;9;1;1;9;-1;-2;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;13;30000;0;10;9;1;1;9;-1;-1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;25;30000;0;8;9;1;1;9;-1;-2;0;0;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;26;30000;0;8;9;1;9;9;-1;0;1;1;0;1;1;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;26;30000;0;8;9;1;1;9;-1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;28;30000;0;8;9;1;1;9;-1;-1;0;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;32;30000;0;8;9;1;1;9;-1;0;0;0;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;32;30000;0;8;9;1;1;9;-1;1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;7;45;30000;0;8;9;1;1;9;-1;-2;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;4;30000;0;18;9;1;7;1;-1;0;1;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;5;30000;0;18;9;1;1;1;-1;0;0;1;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;7;30000;0;17;9;1;1;9;-1;-1;1;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;4;30000;0;18;9;1;1;1;1;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;5;30000;0;16;9;1;1;1;-2;-2;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;7;30000;0;16;9;1;1;9;-2;-2;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;9;30000;0;8;9;1;2;1;-1;1;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;13;30000;0;14;9;1;1;9;-1;-1;1;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;16;30000;0;11;9;1;5;0;-1;-2;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;22;30000;0;8;9;1;3;1;-1;-1;0;1;0;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;25;30000;0;8;9;1;1;9;-1;0;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;26;30000;0;8;9;1;1;9;-1;-2;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;28;30000;0;8;9;1;1;9;-1;-2;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;32;30000;0;8;9;1;1;1;-1;-2;1;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;13;30000;0;15;9;1;1;9;1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;16;30000;0;18;9;1;1;1;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;22;30000;0;10;9;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;25;30000;0;10;9;1;1;9;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;26;30000;0;10;9;1;1;9;-2;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;28;30000;0;8;9;1;1;9;1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;32;30000;0;8;9;1;1;1;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;9;45;30000;0;8;9;1;1;9;-1;-2;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;4;30000;0;25;9;1;1;1;-1;-1;1;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;5;30000;0;22;9;1;1;13;-2;0;0;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;7;30000;0;16;9;1;4;13;-2;1;1;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;9;30000;0;17;9;1;1;13;-1;-2;0;0;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;13;30000;0;14;9;1;8;13;-1;-1;1;1;0;1;1;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;25;30000;0;8;9;1;1;13;-2;0;1;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;4;30000;0;16;9;1;1;1;-1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;5;30000;0;17;9;1;1;13;0;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;7;30000;0;16;9;1;4;13;-1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;9;30000;0;16;9;1;1;13;-1;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;13;30000;0;12;9;1;2;13;-1;-2;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;25;30000;0;13;9;1;8;13;-1;1;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;26;30000;0;8;9;1;1;13;-1;0;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;28;30000;0;8;9;1;1;13;-1;-2;1;0;1;1;1;0;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;32;30000;0;8;9;1;1;13;-1;0;1;1;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;13;45;30000;0;8;9;1;1;13;-2;-2;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;9;30000;0;18;9;1;9;1;-2;-1;1;1;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;16;30000;0;15;9;1;1;1;-2;0;1;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;22;30000;0;11;9;1;1;1;1;-2;1;1;1;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;9;30000;0;17;9;1;6;1;1;0;0;0;0;1;1;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;9;30000;0;16;9;1;4;1;-1;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;16;30000;0;15;9;1;2;1;-1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;16;22;30000;0;17;9;1;1;1;-2;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;9;30000;0;16;9;1;8;1;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;16;30000;0;9;9;1;9;1;0;-1;1;1;0;1;0;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;22;30000;0;8;9;1;5;1;0;1;0;1;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;22;30000;0;8;9;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;22;32;30000;0;8;9;1;1;1;-2;-1;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;4;30000;0;32;9;1;9;25;-1;-2;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;5;30000;0;30;9;1;1;25;-1;0;1;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;4;30000;0;24;9;1;1;25;1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;5;30000;0;24;9;1;1;25;1;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;7;30000;0;21;9;1;1;25;1;0;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;9;30000;0;17;9;1;9;25;1;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;13;30000;0;9;9;1;6;25;0;-1;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;25;30000;0;8;9;1;9;25;-2;1;1;0;1;1;1;0;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;9;30000;0;15;9;1;8;25;0;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;13;30000;0;14;9;1;3;25;-1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;25;30000;0;8;9;1;1;25;0;-1;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;26;30000;0;8;9;1;1;25;0;-2;1;0;1;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;28;30000;0;8;9;1;1;25;-2;-1;1;0;0;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;28;30000;0;8;9;1;1;25;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;32;30000;0;8;9;1;1;25;-2;-2;1;1;0;1;1;0;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;25;45;30000;0;15;9;1;1;25;1;0;1;1;1;1;1;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;4;30000;0;30;9;1;7;26;1;0;1;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;5;30000;0;27;9;1;8;26;0;-2;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;7;30000;0;18;9;1;2;26;-1;1;1;1;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;9;30000;0;17;9;1;7;26;1;0;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;13;30000;0;8;9;1;3;26;-1;0;0;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;4;30000;0;28;9;1;1;26;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;5;30000;0;25;9;1;1;26;-1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;7;30000;0;18;9;1;1;26;1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;9;30000;0;18;9;1;9;26;-1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;13;30000;0;15;9;1;2;26;-1;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;25;30000;0;8;9;1;1;26;-1;1;1;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;26;30000;0;8;9;1;1;26;-2;0;1;1;1;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;28;30000;0;8;9;1;1;26;1;-2;1;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;28;30000;0;10;9;1;1;26;0;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;32;30000;0;8;9;1;1;26;-2;-2;1;0;1;1;1;2;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;26;45;30000;0;15;9;1;1;26;0;0;1;1;0;1;1;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;4;30000;0;33;9;1;1;28;-1;-1;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;5;30000;0;28;9;1;4;28;-2;-2;0;1;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;4;30000;0;35;9;1;1;28;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;5;30000;0;25;9;1;1;28;-1;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;7;30000;0;23;9;1;1;28;-1;-2;1;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;9;30000;0;21;9;1;7;28;-2;-2;0;1;1;1;1;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;13;30000;0;15;9;1;4;28;0;1;1;1;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;9;30000;0;18;9;1;8;28;0;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;13;30000;0;15;9;1;2;28;0;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;25;30000;0;8;9;1;1;28;0;0;0;1;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;26;30000;0;10;9;1;1;28;-2;0;0;1;1;1;0;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;28;30000;0;8;9;1;1;28;-1;0;1;1;0;1;0;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;28;30000;0;12;9;1;1;28;0;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;32;30000;0;15;9;1;1;28;-1;-2;0;0;0;1;1;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;28;45;30000;0;15;9;1;1;28;-2;0;0;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;4;30000;0;32;9;1;5;32;0;-1;1;1;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;5;30000;0;28;9;1;3;32;0;-2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;7;30000;0;28;9;1;9;32;1;-1;1;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;9;30000;0;22;9;1;9;1;0;-1;1;0;0;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;13;30000;0;9;9;1;4;32;0;0;0;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;22;30000;0;8;9;1;1;1;-1;1;1;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;4;30000;0;39;9;1;1;32;1;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;5;30000;0;38;9;1;1;32;-1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;7;30000;0;25;9;1;8;32;0;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;9;30000;0;25;9;1;4;1;1;0;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;13;30000;0;15;9;1;8;32;1;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;22;30000;0;15;9;1;1;1;-2;0;0;0;0;1;0;0;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;25;30000;0;8;9;1;1;32;1;1;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;26;30000;0;8;9;1;1;32;0;1;1;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;28;30000;0;15;9;1;1;32;0;0;0;0;0;1;1;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;28;30000;0;15;9;1;1;32;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;32;30000;0;15;9;1;1;1;-2;0;1;0;0;1;1;0;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;45;30000;0;15;9;1;1;32;1;0;0;1;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;32;45;30000;0;15;9;1;1;32;0;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;45;32;30000;0;10;9;1;1;45;1;0;1;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;9;45;45;30000;0;9;9;1;1;45;1;-2;1;1;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;4;30000;0;16;10;1;1;1;-1;-1;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;10;30000;0;12;10;1;1;1;-1;-2;0;0;1;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;15;30000;0;8;10;1;3;10;-1;1;0;1;0;1;1;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;4;30000;0;20;10;1;4;1;-1;0;1;1;0;1;1;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;4;30000;0;16;10;1;1;1;-2;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;10;30000;0;13;10;1;1;1;-2;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;4;15;30000;0;8;10;1;1;10;-2;1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;4;30000;0;16;10;1;1;1;-2;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;10;30000;0;8;10;1;2;1;-1;-2;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;15;30000;0;8;10;1;1;10;-1;0;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;4;30000;0;22;10;1;1;15;-1;0;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;10;30000;0;17;10;1;9;15;-1;-2;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;15;30000;0;12;10;1;2;15;-2;0;0;1;0;1;0;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;10;15;30000;0;18;10;1;1;10;1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;4;30000;0;22;10;1;1;15;-1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;10;30000;0;16;10;1;3;15;-2;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;10;15;15;30000;0;13;10;1;9;15;-2;-2;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;12;12;12;30000;0;8;12;1;12;12;-2;-1;1;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;4;30000;0;16;13;1;1;1;-1;-1;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;5;30000;0;16;13;1;1;1;-1;-1;0;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;7;30000;0;11;13;1;7;1;-2;-2;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;9;30000;0;9;13;1;4;1;-1;1;0;0;1;1;0;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;13;30000;0;9;13;1;2;1;-2;1;1;1;1;1;0;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;4;30000;0;16;13;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;5;30000;0;13;13;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;7;30000;0;13;13;1;2;1;1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;9;30000;0;10;13;1;12;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;13;30000;0;8;13;1;5;1;1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;17;30000;0;8;13;1;13;1;-1;-1;0;0;1;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;25;30000;0;8;13;1;1;13;-2;-1;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;26;30000;0;8;13;1;1;13;-1;-1;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;28;30000;0;8;13;1;1;13;-2;-1;1;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;32;30000;0;8;13;1;11;1;-2;0;0;1;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;45;30000;0;8;13;1;1;13;-1;-1;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;4;30000;0;16;13;1;1;1;-2;0;0;0;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;5;30000;0;16;13;1;1;1;-1;-2;0;1;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;7;30000;0;13;13;1;2;1;-2;-1;1;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;9;30000;0;11;13;1;4;13;-1;-1;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;13;30000;0;8;13;1;6;1;-1;-2;0;1;0;1;1;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;16;30000;0;8;13;1;10;1;-2;-1;1;1;1;1;0;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;25;30000;0;8;13;1;1;13;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;26;30000;0;8;13;1;1;13;-2;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;28;30000;0;8;13;1;1;13;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;32;30000;0;8;13;1;1;1;-2;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;4;45;30000;0;8;13;1;1;13;-1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;4;30000;0;16;13;1;1;1;-2;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;5;30000;0;14;13;1;1;1;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;7;30000;0;13;13;1;11;1;1;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;9;30000;0;13;13;1;3;13;-1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;13;30000;0;8;13;1;3;1;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;16;30000;0;8;13;1;1;1;-2;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;17;30000;0;8;13;1;7;1;-2;-2;0;1;0;1;1;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;24;30000;0;8;13;1;11;1;-1;0;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;25;30000;0;8;13;1;1;13;-2;-1;1;1;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;24;30000;0;8;13;1;1;1;-2;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;25;30000;0;8;13;1;1;13;1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;26;30000;0;8;13;1;10;1;-1;-2;0;0;0;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;28;30000;0;8;13;1;1;13;-2;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;28;30000;0;8;13;1;1;13;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;32;30000;0;8;13;1;1;1;-2;0;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;45;30000;0;8;13;1;1;13;-2;0;0;1;1;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;4;30000;0;17;13;1;1;1;-1;0;1;1;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;5;30000;0;17;13;1;1;1;-1;0;0;1;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;7;30000;0;14;13;1;10;1;-1;-1;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;9;30000;0;12;13;1;11;13;-2;-1;1;0;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;5;45;30000;0;8;13;1;1;13;-1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;4;30000;0;17;13;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;5;30000;0;16;13;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;7;30000;0;13;13;1;12;1;-2;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;9;30000;0;12;13;1;5;13;1;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;13;30000;0;9;13;1;6;1;-1;-1;1;1;1;1;0;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;25;30000;0;8;13;1;1;13;-2;-1;1;0;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;25;30000;0;8;13;1;1;13;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;26;30000;0;8;13;1;1;13;-2;-2;1;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;28;30000;0;8;13;1;1;13;-2;-1;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;32;30000;0;8;13;1;1;13;0;-2;1;1;1;1;0;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;28;30000;0;8;13;1;1;13;-1;-1;0;0;1;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;32;30000;0;8;13;1;1;13;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;7;45;30000;0;8;13;1;1;13;1;-2;0;0;0;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;4;30000;0;19;13;1;1;1;-1;-1;1;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;5;30000;0;17;13;1;1;13;-1;-1;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;7;30000;0;17;13;1;13;13;-1;-1;1;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;9;30000;0;14;13;1;10;13;-2;-1;1;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;13;30000;0;8;13;1;1;13;-1;-1;1;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;25;30000;0;8;13;1;1;13;-1;-1;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;26;30000;0;8;13;1;1;13;-2;0;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;28;30000;0;8;13;1;1;13;-2;-1;0;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;4;30000;0;16;13;1;1;1;-2;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;5;30000;0;16;13;1;10;13;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;7;30000;0;16;13;1;12;13;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;9;30000;0;13;13;1;2;13;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;13;30000;0;10;13;1;5;13;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;25;30000;0;8;13;1;1;13;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;26;30000;0;8;13;1;1;13;-1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;28;30000;0;8;13;1;1;13;-1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;32;30000;0;8;13;1;1;13;-2;0;1;0;0;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;9;45;30000;0;8;13;1;1;13;0;-2;0;1;1;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;4;30000;0;23;13;1;1;1;-2;-2;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;5;30000;0;24;13;1;1;1;-2;-2;1;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;7;30000;0;22;13;1;1;1;-2;-2;1;0;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;9;30000;0;18;13;1;1;13;-1;-1;1;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;4;30000;0;24;13;1;1;1;1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;5;30000;0;24;13;1;1;1;1;-2;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;7;30000;0;24;13;1;1;1;-2;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;9;30000;0;24;13;1;1;13;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;13;30000;0;8;13;1;4;1;-1;-2;0;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;14;30000;0;21;13;1;1;13;-1;-2;1;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;17;30000;0;8;13;1;1;1;-1;-1;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;24;30000;0;8;13;1;1;13;-1;-2;1;1;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;14;30000;0;18;13;1;1;13;-1;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;17;30000;0;15;13;1;1;1;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;24;30000;0;12;13;1;1;13;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;25;30000;0;8;13;1;1;13;-1;0;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;26;30000;0;9;13;1;1;13;-1;-1;1;1;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;26;30000;0;14;13;1;1;13;-1;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;28;30000;0;8;13;1;1;13;-1;-1;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;32;30000;0;8;13;1;1;1;-1;0;1;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;13;45;30000;0;8;13;1;1;13;-2;0;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;13;30000;0;15;13;1;2;14;-1;-1;1;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;14;30000;0;13;13;1;2;14;-1;1;0;0;1;1;1;2;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;13;30000;0;13;13;1;12;14;-2;0;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;14;30000;0;15;13;1;1;14;-2;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;25;30000;0;8;13;1;1;14;-2;-1;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;26;30000;0;8;13;1;1;14;-2;0;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;32;30000;0;8;13;1;1;14;-2;-2;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;16;5;30000;0;20;13;1;9;1;-1;0;1;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;4;30000;0;19;13;1;11;1;-1;-1;1;1;0;1;1;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;26;30000;0;9;13;1;1;14;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;14;32;30000;0;8;13;1;1;14;1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;16;5;30000;0;20;13;1;9;1;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;4;30000;0;18;13;1;10;1;-2;0;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;5;30000;0;19;13;1;10;1;0;-1;1;1;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;13;30000;0;9;13;1;9;1;1;-1;1;1;0;1;1;2;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;17;30000;0;8;13;1;1;1;-2;1;1;0;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;17;32;30000;0;8;13;1;1;1;1;-2;1;0;0;1;1;2;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;5;30000;0;22;13;1;5;1;1;-1;1;1;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;13;30000;0;8;13;1;8;24;-1;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;13;30000;0;13;13;1;10;24;-1;0;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;24;30000;0;8;13;1;1;24;1;1;1;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;26;30000;0;15;13;1;1;24;1;0;0;1;0;1;1;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;24;32;30000;0;16;13;1;1;24;1;0;1;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;4;30000;0;24;13;1;4;25;-2;1;1;1;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;4;30000;0;22;13;1;2;25;-2;1;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;5;30000;0;22;13;1;3;25;0;-1;1;1;1;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;7;30000;0;15;8;1;13;25;-2;5;0;1;1;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;7;30000;0;15;8;1;11;25;1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;9;30000;0;15;8;1;4;25;-2;6;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;13;30000;0;8;13;1;7;25;-2;-1;1;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;14;30000;0;15;8;1;7;25;0;1;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;25;30000;0;10;8;1;3;25;1;3;0;1;1;1;0;1;0;1;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;14;30000;0;15;8;1;6;25;0;2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;25;30000;0;30;8;1;4;25;1;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;26;30000;0;15;13;1;1;25;1;-2;1;1;0;1;1;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;28;30000;0;15;8;1;1;25;-1;2;0;1;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;32;30000;0;5;8;1;1;25;-1;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;25;45;30000;0;15;13;1;1;25;0;-2;1;0;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;4;30000;0;15;8;1;11;26;0;6;0;0;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;4;30000;0;15;8;1;4;26;-1;1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;5;30000;0;23;13;1;13;1;0;-2;1;0;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;7;30000;0;22;13;1;13;26;0;-2;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;9;30000;0;16;13;1;11;26;-1;-1;1;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;13;30000;0;8;13;1;13;26;0;0;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;14;30000;0;8;13;1;11;26;-2;-2;1;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;24;30000;0;15;13;1;1;26;-1;-2;0;1;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;7;30000;0;20;13;1;10;26;-2;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;9;30000;0;15;13;1;5;26;-2;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;13;30000;0;11;13;1;13;26;-2;1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;14;30000;0;11;13;1;8;26;-2;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;24;30000;0;15;13;1;1;26;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;25;30000;0;15;13;1;1;26;-1;0;1;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;26;30000;0;15;13;1;1;26;-1;0;0;1;1;1;1;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;28;30000;0;16;13;1;1;26;-2;-2;0;0;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;32;30000;0;15;13;1;1;26;0;-2;1;0;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;32;30000;0;15;13;1;1;26;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;26;45;30000;0;15;13;1;1;26;1;-2;1;0;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;4;30000;0;27;13;1;4;28;-1;-1;1;0;0;1;1;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;5;30000;0;19;13;1;9;28;-1;-2;1;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;7;30000;0;23;13;1;10;28;-1;-2;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;9;30000;0;17;13;1;10;28;1;-1;1;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;13;30000;0;8;13;1;13;28;0;-1;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;25;30000;0;16;13;1;1;28;1;0;1;0;0;1;0;2;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;4;30000;0;25;13;1;4;28;-1;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;5;30000;0;17;13;1;9;28;0;0;0;0;0;1;0;1;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;7;30000;0;21;13;1;11;28;1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;9;30000;0;16;13;1;10;28;0;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;13;30000;0;13;13;1;11;28;1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;25;30000;0;15;13;1;1;28;-1;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;26;30000;0;16;13;1;1;28;-1;-2;1;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;28;30000;0;15;13;1;1;28;-1;-2;0;1;0;1;1;2;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;32;30000;0;15;13;1;1;28;1;0;0;0;1;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;32;30000;0;15;13;1;1;28;-2;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;28;45;30000;0;15;13;1;1;28;-1;-2;1;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;4;30000;0;27;13;1;11;1;-2;-1;1;0;0;1;1;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;5;30000;0;23;13;1;9;1;0;-1;0;1;0;1;0;1;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;7;30000;0;25;13;1;6;32;0;-1;1;1;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;9;30000;0;18;13;1;10;32;0;-2;1;1;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;13;30000;0;10;13;1;1;0;1;1;1;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;14;30000;0;8;13;1;10;32;-2;-1;0;1;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;4;30000;0;25;13;1;6;1;-1;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;5;30000;0;25;13;1;11;1;0;-2;0;0;0;1;0;1;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;7;30000;0;25;13;1;4;32;0;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;9;30000;0;16;13;1;7;32;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;13;30000;0;13;13;1;13;1;-1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;14;30000;0;13;13;1;12;32;-2;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;17;30000;0;8;13;1;1;1;-1;1;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;24;30000;0;16;13;1;1;32;-2;-2;1;1;0;1;0;2;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;25;30000;0;15;13;1;1;32;1;-2;1;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;25;30000;0;15;13;1;1;32;0;-2;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;26;30000;0;15;13;1;1;32;-1;0;1;1;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;28;30000;0;16;13;1;1;32;-1;-2;1;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;32;30000;0;15;13;1;1;1;0;0;1;1;1;1;0;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;45;30000;0;15;13;1;1;32;-2;-2;1;1;0;1;1;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;4;30000;0;26;13;1;1;45;-2;1;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;5;30000;0;32;8;1;4;45;1;-1;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;7;30000;0;35;13;1;5;45;-2;-2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;9;30000;0;28;13;1;8;45;1;0;1;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;13;30000;0;15;13;1;11;45;1;-2;0;1;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;28;30000;0;15;13;1;1;32;1;-2;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;32;30000;0;15;13;1;1;1;-2;0;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;32;45;30000;0;15;13;1;1;32;-1;1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;4;30000;0;25;13;1;11;45;0;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;5;30000;0;27;8;1;5;45;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;7;30000;0;37;13;1;6;45;1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;9;30000;0;29;13;1;13;45;1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;13;30000;0;15;13;1;3;45;-2;0;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;25;30000;0;17;8;1;9;45;0;1;1;0;1;1;0;1;0;1;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;26;30000;0;30;13;1;1;45;-1;-2;1;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;28;30000;0;10;8;1;6;45;-1;-1;0;1;0;1;0;1;2;1;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;32;30000;0;10;8;1;3;45;-1;0;0;1;0;1;1;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;13;45;45;30000;0;30;13;1;1;45;-2;0;1;1;1;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;5;28;30000;0;8;14;1;9;14;-2;0;0;0;0;1;1;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;13;30000;0;8;14;1;7;14;-2;-1;0;0;0;1;0;0;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;13;30000;0;13;14;1;5;14;-2;0;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;14;30000;0;8;14;1;1;14;-1;0;1;1;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;25;30000;0;8;14;1;1;14;-2;-2;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;26;30000;0;8;14;1;1;14;-1;-1;0;0;1;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;13;32;30000;0;8;14;1;1;14;-2;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;13;30000;0;22;14;1;1;14;-2;-1;1;1;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;13;30000;0;24;14;1;1;14;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;14;30000;0;8;14;1;5;14;-1;-1;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;16;30000;0;21;14;1;1;14;-1;-1;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;25;30000;0;8;14;1;1;14;-2;-1;0;1;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;26;30000;0;8;14;1;1;14;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;16;30000;0;24;14;1;1;14;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;25;30000;0;24;14;1;1;14;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;26;30000;0;18;14;1;1;14;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;28;30000;0;8;14;1;1;14;-2;0;1;1;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;29;30000;0;8;14;1;1;14;-2;-2;1;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;32;30000;0;8;14;1;1;14;-2;-1;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;16;14;30000;0;18;14;1;11;16;-2;0;1;0;1;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;14;32;30000;0;12;14;1;1;14;-1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;16;14;30000;0;17;14;1;8;16;1;-2;0;0;0;1;0;1;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;16;16;30000;0;17;14;1;4;16;-1;-1;1;0;1;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;16;29;30000;0;8;14;1;1;16;-2;-2;0;1;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;13;30000;0;8;14;1;1;25;1;1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;14;30000;0;8;14;1;13;25;-2;0;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;25;30000;0;15;14;1;1;25;1;-1;0;1;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;14;30000;0;11;14;1;6;25;-2;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;25;30000;0;15;14;1;1;25;0;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;26;30000;0;15;8;1;1;25;1;3;1;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;25;32;30000;0;10;14;1;1;25;-1;1;1;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;13;30000;0;21;14;1;13;26;0;-2;0;1;0;1;1;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;14;30000;0;8;14;1;9;26;1;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;13;30000;0;11;14;1;12;26;-2;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;14;30000;0;11;14;1;8;26;1;-2;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;25;30000;0;8;14;1;1;26;0;1;0;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;26;30000;0;8;14;1;1;26;-2;1;1;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;26;32;30000;0;8;14;1;1;26;-2;1;0;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;5;30000;0;32;14;1;13;28;-2;0;1;1;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;14;30000;0;8;14;1;9;28;-2;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;5;30000;0;25;14;1;13;28;-1;-2;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;14;30000;0;13;14;1;7;28;-2;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;28;28;30000;0;15;14;1;1;28;-1;0;0;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;14;30000;0;10;14;1;1;29;0;1;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;16;30000;0;9;14;1;9;29;1;1;0;1;0;1;1;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;14;30000;0;11;14;1;14;29;0;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;16;30000;0;16;14;1;14;29;1;2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;29;30000;0;13;14;1;1;29;1;1;1;0;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;29;32;30000;0;16;14;1;1;29;1;-1;1;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;13;30000;0;8;14;1;8;32;0;-1;0;0;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;14;30000;0;13;14;1;12;32;-1;-2;0;1;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;13;30000;0;13;14;1;10;32;1;1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;14;30000;0;14;14;1;6;32;-2;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;25;30000;0;8;14;1;1;32;-2;1;1;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;26;30000;0;8;14;1;1;32;-2;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;29;30000;0;16;14;1;1;32;1;-2;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;14;32;32;30000;0;16;14;1;1;32;0;-1;1;1;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;4;30000;0;16;15;1;1;1;-2;-1;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;10;30000;0;11;15;1;1;15;-1;-1;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;15;30000;0;8;15;1;1;15;-2;0;1;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;4;30000;0;17;15;1;6;15;-1;0;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;10;30000;0;11;15;1;1;15;-2;-1;1;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;15;30000;0;8;15;1;8;15;-1;0;1;0;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;4;30000;0;28;15;1;1;15;-1;-1;1;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;10;30000;0;17;15;1;15;15;-1;0;1;0;1;1;1;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;4;30000;0;16;15;1;1;1;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;10;30000;0;10;15;1;6;15;-1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;4;15;30000;0;8;15;1;1;15;-1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;4;30000;0;17;15;1;1;15;1;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;10;30000;0;12;15;1;6;15;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;10;15;30000;0;10;15;1;1;15;-2;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;4;30000;0;28;15;1;1;15;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;10;30000;0;24;15;1;1;15;-1;-1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;15;15;15;30000;0;8;15;1;8;1;-1;-2;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;5;30000;0;16;16;1;10;1;-1;0;0;1;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;13;30000;0;8;8;1;15;1;-1;0;0;0;0;1;1;2;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;5;30000;0;16;16;1;3;1;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;13;30000;0;13;8;1;1;1;1;2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;16;30000;0;8;16;1;7;1;-2;-1;0;1;0;1;0;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;24;30000;0;8;16;1;4;1;-1;-1;0;0;0;1;1;0;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;24;30000;0;8;16;1;1;1;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;5;26;30000;0;8;16;1;14;1;-1;-2;1;1;0;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;7;3;30000;0;24;16;1;7;1;-1;1;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;9;9;30000;0;15;16;1;2;1;-1;-2;1;1;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;7;3;30000;0;18;16;1;15;1;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;9;9;30000;0;15;16;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;9;16;30000;0;8;16;1;1;1;-1;-2;1;1;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;9;22;30000;0;8;16;1;1;1;-1;0;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;13;5;30000;0;22;16;1;8;1;-1;-1;1;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;14;30000;0;14;16;1;1;16;-2;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;13;5;30000;0;23;16;1;12;1;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;14;30000;0;15;16;1;1;16;-1;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;16;30000;0;12;16;1;1;16;-2;0;1;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;29;30000;0;8;16;1;1;16;-1;0;1;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;5;30000;0;32;16;1;1;1;-1;0;1;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;14;29;30000;0;10;16;1;1;16;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;5;30000;0;35;16;1;1;1;-2;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;9;30000;0;25;16;1;1;1;-1;-2;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;14;30000;0;27;16;1;1;16;-1;-2;1;1;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;14;30000;0;25;16;1;1;16;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;16;30000;0;8;16;1;3;1;-2;1;0;1;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;22;30000;0;21;16;1;1;1;-2;0;1;0;1;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;29;30000;0;8;16;1;1;16;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;29;30000;0;25;16;1;1;16;1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;16;55;30000;0;8;16;1;1;16;-2;0;1;1;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;22;9;30000;0;21;16;1;9;1;-2;-1;1;1;1;1;1;0;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;22;16;30000;0;8;16;1;1;1;-1;1;1;0;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;22;22;30000;0;8;16;1;1;1;0;1;1;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;24;5;30000;0;22;16;1;13;1;-2;-2;1;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;26;5;30000;0;22;16;1;6;1;1;-1;1;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;14;30000;0;41;16;1;11;29;-2;-1;0;0;0;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;16;30000;0;15;16;1;2;29;0;2;0;1;1;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;24;5;30000;0;18;16;1;5;1;0;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;26;5;30000;0;20;16;1;15;1;-1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;14;30000;0;15;8;1;13;29;-1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;16;30000;0;15;8;1;13;29;1;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;29;30000;0;16;16;1;1;29;1;0;1;0;1;1;1;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;55;30000;0;15;16;1;1;29;1;0;0;1;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;29;55;30000;0;15;16;1;1;29;-1;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;55;16;30000;0;32;16;1;1;55;1;-1;1;1;1;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;55;29;30000;0;30;16;1;1;55;-1;0;1;0;0;1;1;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;16;55;55;30000;0;15;16;1;1;55;1;1;1;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;1;1;30000;0;15;17;1;1;17;1;1;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;4;30000;0;16;17;1;1;1;-1;-1;0;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;5;30000;0;17;17;1;3;1;-1;-2;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;13;30000;0;9;17;1;1;1;-2;0;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;17;30000;0;8;17;1;1;1;-2;-2;0;1;0;1;1;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;1;1;30000;0;14;17;1;11;17;1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;4;30000;0;14;17;1;1;1;-1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;5;30000;0;14;17;1;2;1;1;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;13;30000;0;8;17;1;1;1;1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;17;30000;0;8;17;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;4;32;30000;0;8;17;1;1;1;-1;-2;0;1;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;4;30000;0;16;17;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;5;30000;0;16;17;1;12;1;-2;-2;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;13;30000;0;8;17;1;4;1;-1;-2;0;1;1;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;17;30000;0;8;17;1;2;1;-2;-1;0;0;0;1;1;0;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;4;30000;0;16;17;1;1;1;1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;5;30000;0;16;17;1;4;1;-1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;13;30000;0;8;17;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;17;30000;0;8;17;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;5;32;30000;0;8;17;1;1;1;-1;0;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;4;30000;0;19;17;1;1;1;-1;0;1;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;5;30000;0;22;17;1;3;1;-2;1;1;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;13;30000;0;14;17;1;1;1;-1;0;1;1;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;4;30000;0;20;17;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;5;30000;0;16;17;1;4;1;-2;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;13;30000;0;15;17;1;1;1;-2;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;17;30000;0;14;17;1;1;1;-2;-2;1;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;13;32;30000;0;8;17;1;1;1;-1;0;1;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;4;30000;0;21;17;1;6;1;-2;1;0;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;5;30000;0;17;17;1;10;1;-2;-1;0;1;0;1;1;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;4;30000;0;18;17;1;8;1;-2;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;5;30000;0;14;17;1;17;1;-1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;13;30000;0;8;17;1;1;1;0;1;1;1;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;17;30000;0;8;17;1;4;1;-1;-1;0;1;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;32;30000;0;17;17;1;1;1;0;-2;1;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;35;30000;0;15;17;1;1;1;-2;-2;1;1;1;1;0;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;4;30000;0;36;17;1;10;1;-2;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;32;30000;0;15;17;1;1;1;-2;1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;17;35;30000;0;15;17;1;1;1;-2;-1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;4;30000;0;25;17;1;7;1;-2;-2;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;5;30000;0;28;17;1;8;1;-2;1;0;0;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;13;30000;0;11;17;1;1;0;-2;1;1;0;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;17;30000;0;27;17;1;1;1;-1;0;0;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;32;30000;0;16;17;1;1;1;1;0;1;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;35;30000;0;15;17;1;1;1;0;0;0;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;35;17;30000;0;30;17;1;1;1;-2;-2;1;0;1;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;32;30000;0;15;17;1;1;1;0;-2;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;32;35;30000;0;15;17;1;1;1;1;0;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;35;17;30000;0;30;17;1;1;1;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;35;32;30000;0;30;17;1;1;1;1;-2;0;1;0;1;1;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;17;35;35;30000;0;30;17;1;1;1;0;-2;1;1;1;1;1;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;20;20;20;30000;0;8;20;1;1;1;-1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;9;30000;0;14;22;1;1;1;-1;-1;1;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;16;30000;0;8;22;1;1;1;-1;-2;1;1;0;1;1;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;16;30000;0;10;22;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;22;30000;0;8;22;1;1;1;-1;0;0;0;0;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;9;32;30000;0;8;22;1;1;1;-1;-2;1;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;16;9;30000;0;22;22;1;1;1;-1;-2;1;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;16;16;30000;0;15;22;1;1;1;-1;0;1;0;1;1;1;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;16;16;30000;0;18;22;1;11;1;-2;0;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;16;22;30000;0;8;22;1;1;1;-2;-2;1;1;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;9;30000;0;13;22;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;16;30000;0;8;22;1;1;1;-2;1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;22;30000;0;15;22;1;1;1;-2;-1;0;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;32;30000;0;15;22;1;1;1;-1;-2;0;1;1;1;0;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;9;30000;0;41;22;1;10;1;1;-2;0;1;0;1;0;1;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;22;30000;0;17;22;1;1;1;-2;-1;0;1;1;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;22;30000;0;15;22;1;1;1;1;0;0;0;0;1;0;0;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;22;32;30000;0;15;22;1;1;1;-2;1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;9;30000;0;25;22;1;1;1;-1;1;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;22;30000;0;17;22;1;1;1;-2;0;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;22;32;32;30000;0;16;22;1;1;1;-1;-1;1;0;0;1;0;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;23;23;23;30000;0;15;23;1;1;1;-1;-1;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;23;23;23;30000;0;15;23;1;1;1;-2;-1;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;5;30000;0;17;8;1;21;1;-1;0;1;0;0;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;13;30000;0;8;8;1;17;1;-1;3;1;1;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;13;30000;0;10;8;1;6;1;-1;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;16;30000;0;8;8;1;7;1;-1;4;1;1;0;1;0;2;2;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;24;30000;0;8;8;1;1;24;0;-2;1;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;26;30000;0;6;8;1;19;24;0;0;0;0;0;1;0;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;32;30000;0;1;8;1;6;24;-2;1;0;0;0;0;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;5;30000;0;20;24;1;24;1;-2;-2;1;1;1;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;13;30000;0;15;8;1;17;24;1;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;5;32;30000;0;8;8;1;1;24;0;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;5;30000;0;20;24;1;2;1;-2;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;13;30000;0;15;8;1;13;24;-1;0;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;24;30000;0;6;8;1;1;24;-1;4;1;1;1;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;26;30000;0;17;24;1;1;24;-1;-1;0;0;1;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;13;32;30000;0;9;8;1;1;24;1;-2;1;0;0;1;0;2;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;16;5;30000;0;24;24;1;8;1;-2;-2;1;1;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;5;30000;0;32;8;1;18;24;-1;3;1;1;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;13;30000;0;15;24;1;11;24;0;1;0;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;16;5;30000;0;24;24;1;2;1;-2;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;5;30000;0;28;8;1;22;24;-1;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;13;30000;0;28;8;1;20;24;-1;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;24;30000;0;15;24;1;1;1;-2;-1;0;1;0;1;1;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;26;30000;0;16;24;1;1;1;0;-1;0;1;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;32;30000;0;15;24;1;1;1;-1;-1;1;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;5;30000;0;32;8;1;16;26;1;4;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;13;30000;0;13;8;1;23;26;-2;5;0;1;0;1;1;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;24;32;30000;0;15;24;1;1;1;-1;0;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;5;30000;0;28;8;1;15;26;0;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;13;30000;0;27;8;1;8;26;-1;3;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;24;30000;0;10;8;1;12;1;-1;0;0;1;0;1;0;1;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;26;30000;0;16;24;1;1;26;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;26;32;30000;0;15;24;1;1;1;0;-1;1;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;5;30000;0;32;8;1;19;32;1;4;0;0;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;13;30000;0;32;8;1;8;32;0;-2;0;1;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;24;30000;0;17;24;1;1;1;1;-1;1;1;1;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;5;30000;0;39;8;1;24;32;-1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;13;30000;0;27;8;1;6;32;1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;24;30000;0;17;24;1;1;1;-2;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;26;30000;0;18;8;1;7;32;1;-1;0;1;1;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;24;32;32;30000;0;15;24;1;1;1;-1;-1;1;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;4;30000;0;16;25;1;1;1;-2;-1;0;1;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;5;30000;0;11;8;1;11;1;-1;3;1;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;4;30000;0;16;25;1;1;1;1;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;5;30000;0;13;8;1;13;1;-1;3;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;7;30000;0;9;8;1;24;25;-1;3;1;0;1;1;0;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;9;30000;0;8;8;1;23;25;0;3;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;13;30000;0;8;25;1;9;25;0;-1;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;25;30000;0;10;8;1;13;25;-2;0;0;1;1;1;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;26;30000;0;8;8;1;1;25;1;0;0;1;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;9;30000;0;8;8;1;5;25;1;4;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;13;30000;0;8;25;1;9;25;0;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;25;30000;0;8;8;1;11;25;1;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;26;30000;0;8;8;1;16;25;1;-1;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;28;30000;0;8;8;1;1;25;1;1;0;1;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;32;30000;0;8;8;1;1;25;0;4;0;0;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;4;45;30000;0;8;8;1;1;25;0;4;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;4;30000;0;16;25;1;23;1;-2;0;1;0;0;1;1;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;5;30000;0;9;8;1;16;25;-1;5;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;7;30000;0;8;8;1;13;25;-1;3;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;9;30000;0;9;8;1;2;25;-1;4;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;13;30000;0;8;8;1;17;25;-1;4;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;25;30000;0;4;8;1;14;25;-1;0;0;0;1;1;0;2;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;4;30000;0;16;25;1;1;1;-1;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;5;30000;0;10;8;1;25;25;1;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;7;30000;0;8;8;1;23;25;-2;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;9;30000;0;8;8;1;16;25;-1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;13;30000;0;8;8;1;1;25;-2;3;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;25;30000;0;8;8;1;18;25;-2;-1;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;26;30000;0;8;8;1;1;25;0;3;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;28;30000;0;8;8;1;1;25;-1;3;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;32;30000;0;9;8;1;2;25;-1;4;0;0;1;1;0;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;45;30000;0;23;8;1;19;25;-1;0;0;0;0;1;1;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;4;30000;0;11;8;1;22;25;-1;1;0;1;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;5;30000;0;11;8;1;2;25;-1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;32;30000;0;13;8;1;23;25;-1;3;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;5;45;30000;0;17;8;1;9;25;-2;4;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;4;30000;0;12;8;1;6;25;-2;0;0;0;0;1;0;1;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;5;30000;0;14;8;1;14;25;-2;0;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;7;30000;0;8;8;1;23;25;1;3;0;0;0;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;9;30000;0;10;8;1;1;25;-2;6;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;13;30000;0;8;8;1;12;25;-1;-1;1;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;25;30000;0;10;8;1;4;25;-1;1;0;0;1;1;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;26;30000;0;8;25;1;2;25;-2;4;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;28;30000;0;10;8;1;6;25;-2;1;0;1;1;1;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;32;30000;0;2;8;1;1;25;0;5;1;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;45;30000;0;21;8;1;18;25;0;0;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;4;30000;0;15;8;1;18;25;-2;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;5;30000;0;10;8;1;18;25;0;-2;0;0;1;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;9;30000;0;8;8;1;1;25;0;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;13;30000;0;8;8;1;15;25;1;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;25;30000;0;11;8;1;18;25;1;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;26;30000;0;13;8;1;3;25;1;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;28;30000;0;13;8;1;20;25;-1;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;32;30000;0;8;8;1;1;25;0;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;7;45;30000;0;17;8;1;13;25;1;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;4;30000;0;15;8;1;3;25;1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;5;30000;0;15;8;1;23;25;-1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;7;30000;0;15;8;1;3;25;0;-1;0;0;1;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;9;30000;0;15;8;1;19;25;-2;3;0;0;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;13;30000;0;10;8;1;14;25;1;5;1;1;1;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;13;30000;0;15;8;1;12;25;0;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;25;30000;0;7;8;1;1;25;0;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;26;30000;0;3;8;1;1;25;-1;4;1;0;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;28;30000;0;3;8;1;1;25;-2;0;1;1;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;32;30000;0;8;16;1;1;25;-1;2;0;1;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;9;45;30000;0;3;8;1;1;25;-1;0;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;4;30000;0;15;8;1;8;25;-2;5;1;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;5;30000;0;15;8;1;6;25;-2;0;0;1;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;4;30000;0;15;8;1;18;25;0;5;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;5;30000;0;15;8;1;13;25;-2;1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;7;30000;0;15;8;1;14;25;-1;-1;1;0;1;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;9;30000;0;15;8;1;4;25;-2;1;0;1;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;13;30000;0;15;8;1;18;25;-2;4;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;14;30000;0;8;25;1;10;25;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;13;30000;0;15;8;1;16;25;1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;14;30000;0;15;25;1;3;25;1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;25;30000;0;5;8;1;1;25;1;4;1;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;26;30000;0;16;8;1;1;25;0;0;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;28;30000;0;8;16;1;1;25;0;3;1;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;32;30000;0;8;8;1;1;25;-2;0;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;45;30000;0;15;25;1;1;25;0;-1;0;1;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;13;45;30000;0;15;25;1;1;25;-2;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;13;30000;0;8;25;1;10;25;1;1;0;1;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;14;30000;0;8;25;1;12;25;-2;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;25;30000;0;15;25;1;1;25;-1;-1;1;1;1;1;1;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;14;30000;0;11;25;1;11;25;-2;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;25;30000;0;15;25;1;1;25;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;26;30000;0;15;25;1;1;25;0;-1;1;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;32;30000;0;16;25;1;1;25;1;-1;0;1;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;14;32;30000;0;15;25;1;1;25;-1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;4;30000;0;30;8;1;17;25;0;3;0;1;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;5;30000;0;24;8;1;23;25;0;4;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;5;30000;0;30;8;1;21;25;-2;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;7;30000;0;30;8;1;15;25;-2;0;0;1;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;9;30000;0;30;8;1;20;25;1;3;0;1;1;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;9;30000;0;15;8;1;21;25;0;2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;13;30000;0;15;25;1;1;25;0;-1;0;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;14;30000;0;17;25;1;1;25;-1;-1;1;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;25;30000;0;16;25;1;1;1;-2;-1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;14;30000;0;24;25;1;1;25;-2;-1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;25;30000;0;15;25;1;1;1;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;26;30000;0;15;25;1;1;25;-1;-1;0;1;1;1;1;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;28;30000;0;15;25;1;1;25;0;-1;1;1;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;32;30000;0;16;25;1;1;25;-1;-1;1;1;1;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;28;30000;0;15;25;1;1;25;-2;-2;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;32;30000;0;15;25;1;1;25;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;25;45;30000;0;8;25;1;1;25;-1;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;4;30000;0;30;8;1;20;26;-1;3;0;0;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;5;30000;0;30;8;1;2;26;-2;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;5;30000;0;30;8;1;9;26;1;-2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;7;30000;0;30;8;1;18;26;-1;3;0;1;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;9;30000;0;30;8;1;10;26;0;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;13;30000;0;16;25;1;1;26;1;-1;1;0;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;9;30000;0;16;16;1;7;26;-2;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;13;30000;0;16;25;1;1;26;0;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;14;30000;0;17;25;1;1;26;1;-1;0;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;25;30000;0;15;25;1;1;26;1;0;1;1;0;1;1;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;25;30000;0;15;25;1;1;26;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;26;30000;0;15;25;1;1;26;-1;-1;1;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;28;30000;0;6;8;1;19;26;1;4;0;1;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;32;30000;0;16;25;1;1;26;0;0;1;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;28;30000;0;30;16;1;16;26;0;-1;0;0;0;1;0;1;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;32;30000;0;15;25;1;1;26;1;-2;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;26;45;30000;0;8;25;1;1;26;-2;1;0;0;1;1;1;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;4;30000;0;30;8;1;17;28;-1;6;0;1;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;5;30000;0;14;8;1;17;28;1;3;0;0;1;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;5;30000;0;30;16;1;9;28;-2;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;7;30000;0;30;8;1;23;28;-2;3;1;1;1;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;9;30000;0;8;25;1;1;28;-2;1;0;1;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;13;30000;0;15;25;1;1;28;-1;-1;1;0;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;25;30000;0;15;25;1;1;28;0;0;0;0;1;1;1;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;25;30000;0;15;25;1;1;28;-2;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;26;30000;0;16;25;1;1;28;-2;-1;1;0;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;28;30000;0;16;25;1;1;28;-2;-1;0;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;32;30000;0;16;25;1;1;28;0;0;0;1;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;45;30000;0;17;25;1;1;28;-1;0;1;1;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;4;30000;0;49;25;1;4;32;1;4;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;5;30000;0;8;25;1;1;32;-1;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;7;30000;0;32;25;1;1;32;1;4;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;9;30000;0;62;25;1;2;32;0;1;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;13;30000;0;51;25;1;8;32;1;4;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;14;30000;0;32;25;1;9;32;-1;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;28;30000;0;16;25;1;1;28;0;0;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;32;30000;0;15;25;1;1;28;-1;0;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;28;45;30000;0;15;25;1;1;28;1;0;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;4;30000;0;30;8;1;8;32;-2;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;5;30000;0;30;8;1;6;32;-1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;7;30000;0;30;8;1;20;32;-1;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;9;30000;0;30;8;1;12;32;0;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;13;30000;0;15;16;1;2;32;1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;14;30000;0;15;16;1;9;32;1;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;25;30000;0;8;25;1;1;32;-1;1;0;1;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;26;30000;0;8;25;1;1;32;-2;1;0;1;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;28;30000;0;8;25;1;1;32;-2;1;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;32;30000;0;4;25;1;1;32;-1;1;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;32;45;30000;0;8;25;1;1;32;-1;1;0;1;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;4;30000;0;35;25;1;9;45;-2;4;0;1;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;5;30000;0;25;25;1;9;45;-2;3;0;0;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;7;30000;0;16;25;1;12;45;1;-1;1;0;0;1;1;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;4;30000;0;22;8;1;6;45;-2;4;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;5;30000;0;23;8;1;6;45;1;3;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;7;30000;0;27;16;1;4;45;1;-2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;9;30000;0;17;25;1;9;45;0;1;1;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;13;30000;0;31;25;1;1;45;-2;-1;1;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;25;30000;0;30;25;1;1;45;-1;-1;0;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;26;30000;0;5;8;1;1;45;0;2;0;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;28;30000;0;7;8;1;1;45;-2;2;0;0;1;1;0;2;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;25;30000;0;30;25;1;1;45;-1;-1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;26;30000;0;10;16;1;10;45;0;0;0;0;0;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;28;30000;0;7;16;1;3;45;0;-1;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;32;30000;0;15;25;1;1;45;1;-1;1;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;45;30000;0;10;25;1;1;45;0;1;1;0;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;25;45;45;30000;0;30;25;1;1;45;1;0;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;4;30000;0;16;26;1;6;1;-1;-2;1;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;5;30000;0;14;26;1;2;26;1;3;0;0;1;1;1;2;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;5;30000;0;10;8;1;26;26;0;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;7;30000;0;9;26;1;3;26;0;4;1;1;1;1;0;0;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;9;30000;0;8;26;1;22;26;0;0;0;0;0;1;1;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;13;30000;0;8;26;1;5;26;0;3;0;0;1;1;0;2;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;13;30000;0;8;8;1;1;26;0;3;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;25;30000;0;8;26;1;1;26;-2;4;1;0;1;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;26;30000;0;4;26;1;16;26;-2;3;1;1;0;1;1;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;28;30000;0;8;26;1;1;26;-2;3;0;1;1;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;32;30000;0;8;26;1;1;26;-1;-2;0;0;0;1;1;0;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;26;30000;0;8;8;1;9;26;-1;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;28;30000;0;8;8;1;1;26;-2;4;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;32;30000;0;13;8;1;4;26;0;1;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;4;45;30000;0;8;26;1;1;26;0;4;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;4;30000;0;8;26;1;3;26;0;3;0;0;0;1;0;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;5;30000;0;14;26;1;3;1;-2;-1;0;1;0;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;7;30000;0;8;26;1;26;26;0;4;0;0;1;1;0;0;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;4;30000;0;14;8;1;14;26;1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;5;30000;0;13;26;1;6;1;-1;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;7;30000;0;8;8;1;16;26;-2;3;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;9;30000;0;8;26;1;20;26;0;-1;0;0;0;1;1;0;2;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;13;30000;0;15;26;1;16;0;-1;0;0;0;1;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;16;30000;0;8;8;1;16;1;0;3;0;1;1;1;1;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;24;30000;0;1;26;1;11;26;0;3;1;1;0;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;25;30000;0;4;26;1;1;26;1;-2;0;1;1;1;1;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;24;30000;0;8;8;1;21;26;-1;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;25;30000;0;8;8;1;23;26;0;0;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;26;30000;0;8;8;1;1;26;0;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;28;30000;0;5;26;1;13;26;-2;4;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;32;30000;0;3;26;1;11;26;-2;3;1;1;0;1;0;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;45;30000;0;6;8;1;1;26;-2;3;0;0;1;1;1;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;4;30000;0;11;8;1;24;26;-1;3;0;1;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;5;30000;0;8;8;1;19;26;-2;-1;1;0;0;1;1;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;28;30000;0;13;8;1;12;26;-1;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;32;30000;0;13;8;1;14;26;1;1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;5;45;30000;0;17;8;1;23;26;-2;3;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;4;30000;0;13;8;1;26;26;-1;3;0;0;0;1;0;1;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;5;30000;0;13;8;1;22;26;-1;-1;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;7;30000;0;8;8;1;18;26;-2;1;0;1;0;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;9;30000;0;8;8;1;22;26;-1;3;1;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;13;30000;0;8;8;1;14;26;-1;5;0;0;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;25;30000;0;4;8;1;25;26;1;3;0;1;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;9;30000;0;8;8;1;6;26;1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;13;30000;0;8;8;1;5;26;-2;-2;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;25;30000;0;13;8;1;4;26;1;0;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;26;30000;0;4;8;1;1;26;0;4;0;0;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;28;30000;0;8;26;1;1;26;0;3;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;32;30000;0;9;8;1;17;26;-1;4;0;0;0;1;0;0;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;32;30000;0;13;8;1;11;26;-2;0;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;7;45;30000;0;8;16;1;1;26;-1;4;0;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;4;30000;0;16;8;1;25;26;0;5;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;5;30000;0;12;8;1;15;26;-2;-1;1;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;4;30000;0;15;8;1;2;26;-1;5;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;5;30000;0;10;8;1;21;26;1;0;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;7;30000;0;15;8;1;10;26;0;3;0;0;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;9;30000;0;17;8;1;17;26;0;-1;1;1;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;13;30000;0;8;26;1;19;26;0;-1;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;25;30000;0;3;8;1;25;26;1;1;0;1;1;1;1;2;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;9;30000;0;15;8;1;19;26;1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;13;30000;0;8;26;1;3;26;0;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;25;30000;0;11;16;1;5;26;0;0;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;26;30000;0;4;26;1;1;26;1;1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;28;30000;0;3;8;1;25;26;-2;4;0;1;0;1;0;2;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;28;30000;0;13;8;1;26;26;1;2;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;32;30000;0;8;26;1;1;26;0;1;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;45;30000;0;15;26;1;1;26;0;-1;1;1;1;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;9;45;30000;0;15;26;1;1;26;0;-1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;4;30000;0;15;8;1;25;26;-1;6;0;0;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;5;30000;0;22;26;1;3;1;-2;-2;1;0;1;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;5;30000;0;20;26;1;5;1;-1;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;7;30000;0;15;8;1;26;26;0;5;1;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;9;30000;0;15;8;1;25;26;1;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;13;30000;0;8;26;1;7;26;1;1;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;14;30000;0;8;26;1;12;26;-2;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;9;30000;0;15;8;1;26;26;1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;13;30000;0;15;8;1;17;26;1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;14;30000;0;15;26;1;16;26;-1;3;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;24;30000;0;16;8;1;1;26;0;0;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;25;30000;0;15;26;1;1;26;-2;-1;1;0;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;25;30000;0;15;26;1;1;26;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;26;30000;0;15;8;1;1;26;-2;4;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;28;30000;0;15;8;1;1;26;0;4;0;0;1;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;28;30000;0;15;8;1;1;26;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;32;30000;0;15;8;1;1;26;-1;3;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;13;45;30000;0;5;8;1;1;26;1;0;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;13;30000;0;15;8;1;20;26;-2;4;1;1;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;13;30000;0;15;8;1;16;26;-1;-2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;14;30000;0;8;26;1;6;26;1;1;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;25;30000;0;16;26;1;1;26;0;-1;0;1;1;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;25;30000;0;15;26;1;1;26;1;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;26;30000;0;15;26;1;1;26;1;-1;0;1;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;32;30000;0;8;26;1;1;26;-1;-1;0;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;16;5;30000;0;22;26;1;25;1;-2;0;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;5;30000;0;31;8;1;23;26;0;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;14;32;30000;0;15;26;1;1;26;1;1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;16;5;30000;0;25;26;1;2;1;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;5;30000;0;28;8;1;6;26;1;-2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;13;30000;0;17;26;1;1;26;0;-1;1;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;24;30000;0;12;8;1;1;1;-2;1;0;1;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;24;30000;0;8;8;1;19;1;1;3;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;26;30000;0;15;26;1;1;1;1;-1;1;1;1;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;24;32;30000;0;12;8;1;1;1;1;1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;4;30000;0;28;8;1;10;26;-1;4;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;5;30000;0;24;8;1;26;26;0;0;1;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;7;30000;0;24;8;1;23;26;0;5;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;9;30000;0;8;26;1;14;26;0;-1;0;1;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;4;30000;0;30;8;1;6;26;0;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;5;30000;0;30;8;1;26;26;0;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;7;30000;0;30;8;1;17;26;0;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;9;30000;0;15;26;1;16;26;1;2;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;13;30000;0;15;26;1;1;26;0;-1;1;1;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;14;30000;0;32;8;1;5;26;1;1;0;0;1;1;0;1;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;14;30000;0;15;16;1;6;26;0;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;25;30000;0;15;8;1;1;26;1;2;0;0;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;26;30000;0;5;8;1;1;26;-2;-2;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;28;30000;0;8;8;1;1;26;-2;6;1;0;1;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;28;30000;0;15;16;1;25;26;0;1;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;32;30000;0;3;8;1;1;26;1;2;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;45;30000;0;10;8;1;1;26;-2;2;0;1;1;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;25;45;30000;0;59;8;1;17;26;1;3;0;0;0;1;0;1;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;4;30000;0;30;8;1;22;26;0;3;0;1;1;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;5;30000;0;30;8;1;3;26;0;5;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;7;30000;0;24;8;1;6;26;-1;5;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;5;30000;0;30;8;1;5;26;0;5;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;7;30000;0;30;8;1;14;26;0;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;9;30000;0;20;26;1;1;26;-2;1;0;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;13;30000;0;30;8;1;26;26;-1;-1;1;1;1;1;1;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;13;30000;0;15;16;1;4;26;-2;1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;14;30000;0;15;26;1;1;26;1;-1;0;1;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;24;30000;0;15;26;1;1;1;-1;-1;1;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;25;30000;0;16;26;1;1;26;-2;-1;1;0;1;1;0;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;26;30000;0;17;26;1;1;1;0;-1;1;0;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;28;30000;0;15;26;1;1;26;-2;-1;1;1;0;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;32;30000;0;15;26;1;1;1;-2;-1;0;0;0;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;25;30000;0;15;26;1;1;26;-2;-1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;26;30000;0;15;26;1;1;1;-2;-1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;28;30000;0;15;26;1;1;26;-2;1;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;32;30000;0;15;26;1;1;1;-2;0;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;26;45;30000;0;8;26;1;1;26;-2;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;4;30000;0;30;8;1;3;28;-2;-1;1;0;0;1;1;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;5;30000;0;30;8;1;14;28;-1;5;1;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;7;30000;0;23;26;1;23;28;-2;1;0;0;1;1;1;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;9;30000;0;15;8;1;19;28;1;3;0;1;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;13;30000;0;15;26;1;1;28;0;-1;0;0;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;25;30000;0;16;26;1;1;28;-1;-1;1;0;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;26;30000;0;16;26;1;1;28;0;-1;0;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;28;30000;0;61;8;1;19;28;-1;1;1;1;0;1;1;1;2;1;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;32;30000;0;15;26;1;1;28;0;-1;1;1;1;1;1;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;45;30000;0;15;26;1;1;28;-1;-1;0;1;0;1;1;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;4;30000;0;37;26;1;12;32;1;6;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;5;30000;0;30;26;1;6;32;-1;6;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;7;30000;0;30;26;1;3;32;-1;5;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;9;30000;0;31;26;1;22;32;1;6;0;1;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;5;30000;0;30;8;1;17;28;-1;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;7;30000;0;15;16;1;9;28;-1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;9;30000;0;16;8;1;3;28;1;2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;13;30000;0;15;26;1;1;28;-1;0;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;25;30000;0;15;26;1;1;28;1;-2;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;26;30000;0;16;26;1;1;28;1;-1;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;28;30000;0;30;16;1;7;28;-2;1;0;0;0;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;32;30000;0;15;26;1;1;28;0;0;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;28;45;30000;0;15;26;1;1;28;-2;-2;0;0;0;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;4;30000;0;30;8;1;7;32;-2;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;5;30000;0;30;8;1;9;32;-1;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;7;30000;0;30;8;1;23;32;1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;9;30000;0;30;8;1;12;32;-1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;13;30000;0;15;26;1;1;32;1;-1;0;1;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;14;30000;0;21;26;1;25;32;0;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;24;30000;0;30;8;1;1;1;-1;-1;1;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;14;30000;0;15;26;1;7;32;0;-1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;24;30000;0;15;8;1;23;1;0;1;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;25;30000;0;8;26;1;1;32;-2;1;0;0;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;26;30000;0;1;26;1;21;32;0;-2;0;0;1;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;26;30000;0;5;8;1;9;32;-2;3;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;28;30000;0;4;8;1;1;32;-2;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;32;30000;0;8;26;1;1;0;-2;1;0;0;1;1;1;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;32;45;30000;0;8;26;1;1;32;-2;1;0;1;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;4;30000;0;22;26;1;15;45;0;5;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;4;30000;0;23;8;1;16;45;-1;5;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;5;30000;0;23;26;1;11;45;1;4;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;7;30000;0;15;26;1;7;45;-1;4;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;9;30000;0;17;26;1;13;45;1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;7;30000;0;27;16;1;18;45;1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;9;30000;0;27;16;1;12;45;0;1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;13;30000;0;17;26;1;12;45;0;1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;25;30000;0;4;8;1;26;45;-1;4;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;25;30000;0;10;8;1;1;45;-1;3;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;26;30000;0;5;26;1;1;45;-2;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;28;30000;0;1;26;1;19;45;-2;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;32;30000;0;3;26;1;10;45;1;6;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;32;30000;0;7;8;1;22;45;-1;-2;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;26;45;45;30000;0;5;26;1;1;45;1;1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;4;30000;0;16;28;1;6;1;-2;-1;1;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;5;30000;0;9;8;1;5;28;1;4;0;1;0;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;7;30000;0;9;8;1;6;28;0;4;0;0;1;1;1;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;9;30000;0;8;8;1;10;28;0;4;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;13;30000;0;10;8;1;13;28;-1;5;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;25;30000;0;8;28;1;1;28;0;6;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;26;30000;0;8;28;1;8;28;-1;4;0;0;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;28;30000;0;8;28;1;1;28;-2;4;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;32;30000;0;8;28;1;1;28;-1;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;45;30000;0;4;28;1;1;28;1;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;4;30000;0;14;8;1;25;28;0;0;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;5;30000;0;8;8;1;19;28;0;5;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;7;30000;0;8;8;1;24;28;-2;0;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;9;30000;0;8;8;1;9;28;-1;4;0;0;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;13;30000;0;9;8;1;19;28;1;1;1;1;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;25;30000;0;8;28;1;25;28;-1;4;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;26;30000;0;5;28;1;26;28;-2;4;0;0;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;28;30000;0;21;28;1;23;28;-1;4;0;1;1;1;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;32;30000;0;3;28;1;6;28;-1;-1;1;0;0;1;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;45;30000;0;4;28;1;12;28;-1;-1;0;0;0;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;4;30000;0;14;28;1;27;28;-2;4;1;0;1;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;4;30000;0;16;28;1;7;1;-2;4;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;5;30000;0;10;8;1;26;28;1;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;7;30000;0;10;8;1;10;28;1;4;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;9;30000;0;8;8;1;17;28;-2;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;13;30000;0;8;8;1;1;28;0;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;25;30000;0;8;8;1;2;28;-1;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;26;30000;0;14;8;1;21;28;-2;4;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;28;30000;0;8;8;1;1;28;-2;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;32;30000;0;8;8;1;1;28;0;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;4;45;30000;0;17;8;1;7;28;1;4;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;4;30000;0;14;8;1;25;28;1;4;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;5;30000;0;10;8;1;15;28;0;-2;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;7;30000;0;8;8;1;1;28;-1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;9;30000;0;8;8;1;11;28;-1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;13;30000;0;8;8;1;1;28;1;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;25;30000;0;8;8;1;28;28;0;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;26;30000;0;17;8;1;11;28;-2;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;28;30000;0;13;8;1;23;28;-1;4;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;32;30000;0;13;8;1;22;28;-2;4;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;5;45;30000;0;8;8;1;1;28;-1;1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;4;30000;0;12;8;1;19;28;-2;0;0;0;0;1;0;1;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;5;30000;0;11;28;1;18;28;0;-2;0;0;1;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;7;30000;0;9;28;1;4;28;0;4;0;0;0;1;0;1;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;7;30000;0;10;8;1;15;28;-1;1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;9;30000;0;8;28;1;5;28;-2;4;0;1;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;13;30000;0;8;28;1;8;28;1;-1;1;0;0;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;25;30000;0;5;28;1;9;28;-2;4;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;26;30000;0;21;28;1;7;28;-1;4;0;0;1;1;1;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;28;30000;0;4;28;1;14;28;0;2;0;1;0;0;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;32;30000;0;5;28;1;16;28;-1;4;0;1;1;1;0;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;45;30000;0;3;28;1;14;28;0;-1;0;0;0;0;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;4;30000;0;15;28;1;17;28;0;4;0;0;1;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;5;30000;0;15;28;1;16;28;-2;4;1;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;7;30000;0;26;28;1;19;28;-2;-1;0;0;1;1;1;2;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;25;30000;0;13;8;1;13;28;1;4;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;26;30000;0;17;8;1;11;28;-1;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;28;30000;0;17;8;1;28;28;1;4;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;32;30000;0;17;8;1;13;28;-2;1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;7;45;30000;0;17;8;1;26;28;-2;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;4;30000;0;15;8;1;14;28;-2;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;5;30000;0;15;8;1;14;28;-2;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;7;30000;0;15;8;1;4;28;0;-2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;9;30000;0;9;28;1;23;28;-1;0;0;1;0;1;0;0;2;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;13;30000;0;9;28;1;4;28;1;-1;0;0;1;1;0;2;2;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;25;30000;0;15;28;1;1;28;0;4;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;26;30000;0;5;28;1;1;28;-2;4;0;0;1;1;0;0;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;28;30000;0;5;28;1;8;28;1;0;1;1;0;1;1;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;32;30000;0;5;28;1;18;28;1;4;1;0;1;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;26;30000;0;11;16;1;18;28;1;-2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;28;30000;0;11;16;1;27;28;0;3;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;32;30000;0;17;16;1;18;28;-1;-2;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;9;45;30000;0;8;28;1;1;28;-2;2;0;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;4;30000;0;21;28;1;5;28;-2;-2;0;1;1;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;5;30000;0;15;28;1;17;28;1;4;0;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;7;30000;0;16;28;1;6;28;0;4;0;0;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;9;30000;0;21;28;1;8;28;0;0;0;1;0;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;13;30000;0;12;28;1;2;28;0;-2;0;1;1;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;25;30000;0;8;28;1;12;28;-2;4;0;0;1;1;1;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;26;30000;0;4;28;1;18;28;-1;4;1;1;1;1;0;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;28;30000;0;8;28;1;6;28;0;4;0;0;0;1;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;32;30000;0;1;28;1;25;28;0;0;0;0;1;0;0;2;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;45;30000;0;2;28;1;1;28;-1;3;0;1;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;4;30000;0;15;28;1;1;28;-1;2;1;1;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;5;30000;0;41;28;1;7;28;1;-2;1;1;0;1;1;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;7;30000;0;45;28;1;10;28;-2;-1;0;0;0;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;9;30000;0;11;28;1;18;28;0;-1;0;1;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;13;30000;0;42;28;1;3;28;1;0;1;0;0;1;1;2;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;4;30000;0;15;8;1;12;28;-2;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;5;30000;0;15;8;1;8;28;1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;7;30000;0;15;8;1;19;28;1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;9;30000;0;15;8;1;7;28;1;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;13;30000;0;15;8;1;20;28;-2;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;25;30000;0;17;16;1;22;28;-2;2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;26;30000;0;17;16;1;19;28;0;2;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;28;30000;0;15;8;1;1;28;-2;1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;32;30000;0;15;8;1;1;28;1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;13;45;30000;0;4;8;1;5;28;-2;4;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;4;30000;0;30;8;1;22;28;-1;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;5;30000;0;30;8;1;14;28;0;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;7;30000;0;30;16;1;19;28;1;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;9;30000;0;16;16;1;9;28;1;2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;13;30000;0;12;28;1;7;28;-1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;25;30000;0;9;28;1;1;28;-1;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;26;30000;0;15;28;1;1;28;-1;6;0;1;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;26;30000;0;30;8;1;1;28;0;5;0;0;0;1;0;1;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;28;30000;0;8;28;1;1;28;-1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;32;30000;0;10;8;1;1;28;-2;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;25;45;30000;0;8;28;1;1;28;-1;1;0;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;4;30000;0;28;28;1;4;28;1;4;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;5;30000;0;28;28;1;13;28;0;6;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;7;30000;0;30;28;1;18;28;1;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;9;30000;0;32;28;1;23;28;-1;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;13;30000;0;23;28;1;14;28;0;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;4;30000;0;30;8;1;10;28;0;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;5;30000;0;30;8;1;14;28;-2;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;7;30000;0;30;8;1;23;28;1;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;9;30000;0;16;16;1;24;28;-1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;13;30000;0;20;28;1;12;28;-2;-1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;25;30000;0;8;28;1;1;28;0;1;0;1;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;26;30000;0;15;16;1;1;28;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;28;30000;0;8;28;1;1;28;0;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;32;30000;0;8;28;1;1;28;-2;1;0;1;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;26;45;30000;0;15;28;1;1;28;1;1;1;1;1;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;4;30000;0;32;28;1;23;28;-1;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;5;30000;0;41;28;1;12;28;-1;0;0;0;0;1;0;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;7;30000;0;32;28;1;8;28;0;5;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;9;30000;0;30;28;1;4;28;1;6;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;13;30000;0;8;28;1;5;28;1;1;0;1;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;4;30000;0;30;8;1;21;28;-1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;5;30000;0;31;8;1;16;28;1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;7;30000;0;30;8;1;11;28;-1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;9;30000;0;15;8;1;27;28;1;3;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;13;30000;0;20;28;1;10;28;1;-2;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;14;30000;0;15;28;1;1;28;-2;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;25;30000;0;16;28;1;1;28;-1;1;0;1;1;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;26;30000;0;16;28;1;1;28;-2;-1;1;1;1;1;0;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;28;30000;0;8;8;1;16;1;-2;4;0;0;1;1;0;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;28;30000;0;15;16;1;25;1;1;0;0;0;0;1;0;1;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;32;30000;0;9;28;1;1;28;-2;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;28;45;30000;0;8;28;1;1;28;-1;1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;4;30000;0;30;28;1;21;32;1;5;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;5;30000;0;32;28;1;16;32;-1;6;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;7;30000;0;30;28;1;22;32;-2;4;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;9;30000;0;21;28;1;23;32;1;-1;0;1;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;4;30000;0;30;8;1;18;32;0;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;5;30000;0;41;8;1;15;32;0;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;7;30000;0;30;8;1;8;32;1;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;9;30000;0;18;28;1;8;32;0;1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;13;30000;0;17;28;1;1;32;0;1;0;0;1;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;25;30000;0;15;16;1;1;32;0;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;26;30000;0;8;28;1;1;32;-2;1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;28;30000;0;8;28;1;1;32;0;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;32;30000;0;8;28;1;1;32;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;32;45;30000;0;8;28;1;1;32;-1;1;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;4;30000;0;23;28;1;24;45;1;5;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;4;30000;0;24;8;1;25;45;1;4;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;5;30000;0;25;28;1;5;45;1;6;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;7;30000;0;26;28;1;19;45;-1;6;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;9;30000;0;18;28;1;4;45;-2;5;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;7;30000;0;28;8;1;12;45;-2;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;9;30000;0;27;8;1;6;45;-2;3;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;13;30000;0;15;28;1;6;45;0;-1;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;25;30000;0;7;8;1;1;45;1;0;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;26;30000;0;4;8;1;1;45;1;0;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;28;30000;0;4;8;1;13;45;-1;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;28;30000;0;5;8;1;1;45;0;4;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;32;30000;0;15;28;1;1;45;-1;1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;45;30000;0;3;8;1;28;45;-1;5;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;14;30000;0;8;29;1;15;29;1;-1;0;1;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;16;30000;0;8;29;1;1;29;-1;2;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;29;30000;0;8;29;1;1;29;0;3;0;1;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;32;30000;0;8;29;1;1;29;1;-2;0;1;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;14;30000;0;8;29;1;22;29;1;5;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;16;30000;0;15;29;1;1;29;-2;4;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;29;30000;0;8;29;1;1;29;1;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;28;45;45;30000;0;4;8;1;26;45;-1;0;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;14;30000;0;15;16;1;11;29;0;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;16;30000;0;17;16;1;19;29;-1;0;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;29;30000;0;15;8;1;1;29;-2;4;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;14;32;30000;0;15;8;1;1;29;0;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;14;30000;0;15;8;1;27;29;-1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;16;30000;0;15;8;1;8;29;1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;29;30000;0;15;8;1;1;29;1;-2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;16;55;30000;0;8;16;1;1;29;0;-2;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;14;30000;0;6;29;1;22;29;1;-1;0;1;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;14;30000;0;15;16;1;7;29;1;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;16;30000;0;13;29;1;1;29;-2;1;0;0;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;29;30000;0;8;29;1;1;29;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;32;30000;0;10;8;1;1;29;1;4;1;0;1;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;29;55;30000;0;8;29;1;1;29;-1;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;14;30000;0;9;29;1;18;32;-1;-1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;14;30000;0;17;29;1;28;32;-1;-2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;29;30000;0;15;16;1;1;32;-1;1;0;1;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;32;30000;0;30;29;1;1;32;-2;5;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;32;55;30000;0;5;16;1;1;32;1;3;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;16;30000;0;15;29;1;12;55;0;1;0;0;0;1;0;1;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;29;30000;0;6;8;1;11;55;-1;6;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;32;30000;0;6;8;1;1;55;0;6;0;0;0;1;0;1;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;29;30000;0;27;8;1;1;55;-2;4;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;32;30000;0;9;8;1;19;55;0;4;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;29;55;55;30000;0;3;16;1;1;55;0;2;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;30;30;30000;0;8;30;1;1;1;-2;1;0;0;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;30;76;30000;0;8;30;1;1;30;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;76;30;30000;0;27;8;1;1;76;-1;4;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;30;76;76;30000;0;4;16;1;1;76;1;2;0;0;1;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;4;30000;0;19;8;1;25;1;-2;-2;1;0;1;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;5;30000;0;17;8;1;25;1;-1;-2;1;0;1;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;7;30000;0;9;8;1;7;32;0;4;1;1;0;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;9;30000;0;8;32;1;13;32;1;1;0;0;1;1;1;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;13;30000;0;11;8;1;7;1;-2;-1;1;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;5;30000;0;18;8;1;25;1;1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;7;30000;0;13;8;1;29;32;-2;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;9;30000;0;10;8;1;2;32;1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;13;30000;0;15;8;1;19;1;-1;0;0;0;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;17;30000;0;8;8;1;12;1;-2;5;1;0;1;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;25;30000;0;8;8;1;10;32;0;6;0;1;0;1;0;0;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;25;30000;0;8;8;1;1;32;0;0;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;26;30000;0;8;8;1;1;32;-1;6;0;1;1;1;1;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;28;30000;0;5;8;1;13;32;0;4;0;1;1;1;1;0;1;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;28;30000;0;8;8;1;1;32;-1;-1;0;1;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;32;30000;0;8;32;1;1;1;-1;-2;0;1;0;1;1;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;4;45;30000;0;8;8;1;1;32;-1;4;1;0;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;4;30000;0;17;16;1;21;1;-1;0;1;0;1;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;5;30000;0;17;8;1;5;1;1;0;0;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;7;30000;0;9;8;1;6;32;-1;-1;0;0;0;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;9;30000;0;8;8;1;30;32;1;-1;0;0;0;1;0;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;4;30000;0;16;8;1;4;1;0;0;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;5;30000;0;15;8;1;8;1;0;0;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;7;30000;0;15;8;1;12;32;1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;9;30000;0;10;8;1;18;32;-2;1;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;13;30000;0;8;32;1;26;1;-2;-2;0;1;0;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;17;30000;0;8;32;1;14;1;-1;-1;0;0;0;1;1;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;24;30000;0;8;8;1;1;32;-2;-1;0;0;0;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;25;30000;0;2;32;1;1;32;1;2;1;1;0;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;26;30000;0;9;8;1;1;32;-2;5;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;28;30000;0;4;32;1;21;32;-1;6;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;32;30000;0;8;32;1;1;1;-1;-1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;45;30000;0;2;8;1;28;32;-2;6;0;1;0;1;1;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;4;30000;0;17;8;1;30;32;-2;5;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;5;30000;0;14;8;1;18;32;1;1;1;0;1;1;0;2;1;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;7;30000;0;14;8;1;26;32;-1;5;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;9;30000;0;8;8;1;21;32;0;4;0;1;0;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;13;30000;0;21;8;1;10;32;-1;6;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;25;30000;0;8;8;1;1;32;1;5;1;1;0;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;26;30000;0;8;8;1;1;32;0;0;1;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;28;30000;0;4;8;1;17;32;0;4;1;0;1;1;0;0;1;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;32;30000;0;9;8;1;1;32;-1;1;0;0;1;0;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;17;30000;0;8;32;1;1;1;-1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;24;30000;0;8;8;1;1;32;0;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;25;30000;0;8;8;1;1;32;-1;-1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;26;30000;0;8;8;1;1;32;-2;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;28;30000;0;8;8;1;1;32;-2;4;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;32;30000;0;8;32;1;1;1;-2;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;5;45;30000;0;8;8;1;1;32;-2;4;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;4;30000;0;18;8;1;19;32;-2;-2;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;5;30000;0;16;8;1;14;32;1;1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;7;30000;0;14;8;1;29;32;0;-1;0;0;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;9;30000;0;10;8;1;31;32;1;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;13;30000;0;8;8;1;9;32;-1;-1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;25;30000;0;8;8;1;1;32;1;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;26;30000;0;8;8;1;1;32;1;1;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;28;30000;0;8;8;1;1;32;0;0;0;0;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;32;30000;0;8;8;1;1;32;0;0;0;0;0;1;0;0;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;7;45;30000;0;8;8;1;1;32;1;1;1;0;0;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;4;30000;0;17;8;1;19;32;1;5;0;0;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;4;30000;0;24;8;1;20;32;1;1;0;0;0;1;0;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;5;30000;0;15;8;1;20;32;-1;4;1;1;0;1;0;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;7;30000;0;15;8;1;22;32;0;5;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;9;30000;0;10;8;1;1;32;1;4;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;13;30000;0;15;8;1;11;32;0;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;22;30000;0;3;8;1;1;32;-1;4;1;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;9;30000;0;15;8;1;11;32;0;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;13;30000;0;15;8;1;7;32;-2;4;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;22;30000;0;6;8;1;1;32;0;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;25;30000;0;6;8;1;1;32;1;1;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;26;30000;0;5;16;1;1;32;1;4;0;1;1;1;1;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;26;30000;0;5;8;1;1;32;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;28;30000;0;6;8;1;1;32;-2;-2;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;32;30000;0;5;8;1;30;32;1;4;0;1;0;1;0;0;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;32;30000;0;4;8;1;1;32;1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;9;45;30000;0;4;8;1;1;32;-1;-2;1;0;1;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;4;30000;0;22;32;1;8;1;-1;1;1;0;1;1;1;0;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;5;30000;0;20;32;1;8;1;-1;0;1;1;1;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;7;30000;0;17;8;1;3;32;0;6;0;1;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;9;30000;0;21;32;1;27;32;-1;-1;0;1;1;1;0;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;13;30000;0;9;32;1;21;1;-1;-2;1;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;14;30000;0;31;32;1;15;32;1;-1;1;1;0;1;0;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;17;30000;0;8;32;1;17;1;-2;-2;0;0;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;24;30000;0;15;8;1;17;32;1;3;0;1;0;1;1;0;1;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;9;30000;0;15;8;1;13;32;1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;13;30000;0;13;32;1;1;1;-1;-2;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;14;30000;0;15;8;1;19;32;-1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;17;30000;0;14;32;1;1;1;-2;-1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;24;30000;0;31;8;1;2;32;0;-2;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;25;30000;0;15;8;1;1;32;-2;-2;1;1;1;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;26;30000;0;15;8;1;1;32;-1;3;0;1;0;1;1;2;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;28;30000;0;18;16;1;5;32;-2;4;1;1;0;1;0;0;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;26;30000;0;32;8;1;8;32;0;1;0;0;0;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;28;30000;0;30;8;1;25;32;0;1;0;0;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;32;30000;0;8;32;1;1;1;-2;0;0;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;13;45;30000;0;5;8;1;1;32;-1;1;0;0;1;1;0;0;0;1;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;13;30000;0;15;32;1;28;32;-2;6;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;14;30000;0;21;32;1;7;32;1;-2;0;1;0;1;0;0;2;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;14;30000;0;15;8;1;14;32;-1;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;25;30000;0;15;32;1;1;32;-1;4;1;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;26;30000;0;15;32;1;1;32;-2;4;1;1;1;1;1;0;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;29;30000;0;8;8;1;1;32;-1;6;1;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;32;30000;0;8;16;1;1;32;-1;-1;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;4;30000;0;32;8;1;8;1;0;1;1;0;1;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;5;30000;0;32;8;1;27;1;1;1;0;1;0;1;1;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;13;30000;0;12;8;1;25;1;0;0;0;1;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;29;30000;0;8;16;1;1;32;-1;-2;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;14;32;30000;0;8;16;1;1;32;1;0;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;4;30000;0;30;8;1;21;1;1;1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;5;30000;0;29;8;1;31;1;1;1;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;13;30000;0;27;8;1;23;1;0;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;17;30000;0;15;32;1;1;1;-1;1;1;0;1;1;1;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;17;32;30000;0;12;8;1;1;1;-2;1;1;0;0;1;0;2;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;9;30000;0;13;32;1;26;32;0;4;0;1;1;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;9;30000;0;27;8;1;8;32;1;-1;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;22;30000;0;12;8;1;1;1;1;4;1;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;32;30000;0;17;8;1;1;1;1;1;1;0;0;1;1;2;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;5;30000;0;18;32;1;15;32;0;4;0;1;0;1;1;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;13;30000;0;9;32;1;7;32;-2;-1;1;0;0;1;0;2;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;22;32;30000;0;7;8;1;1;1;1;0;0;0;0;1;0;1;1;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;5;30000;0;39;8;1;1;32;1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;13;30000;0;28;8;1;14;32;0;0;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;24;30000;0;12;8;1;1;32;-2;-2;1;0;0;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;26;30000;0;12;8;1;1;32;-1;5;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;24;32;30000;0;13;8;1;1;1;-1;0;0;0;0;1;1;2;2;1;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;4;30000;0;30;32;1;31;32;1;4;0;0;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;5;30000;0;17;32;1;20;32;1;4;1;0;1;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;4;30000;0;42;8;1;22;32;-1;0;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;5;30000;0;30;8;1;21;32;0;4;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;7;30000;0;30;32;1;24;32;1;4;0;1;0;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;9;30000;0;12;32;1;10;32;-2;1;0;1;1;1;0;2;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;9;30000;0;15;8;1;27;32;-2;2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;13;30000;0;30;32;1;12;32;-2;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;14;30000;0;30;32;1;23;32;0;4;0;1;0;1;0;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;25;30000;0;15;32;1;1;32;-1;1;0;1;1;1;1;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;14;30000;0;30;8;1;12;32;-1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;25;30000;0;15;32;1;1;32;-1;-1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;26;30000;0;15;32;1;1;32;1;1;1;1;0;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;28;30000;0;6;16;1;1;32;-1;4;1;0;1;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;32;30000;0;12;8;1;1;32;1;0;1;0;1;1;0;1;0;0;1 @@ -1159,60 +1159,60 @@ Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;25;45;30000;0;10;8;1;1;32;-2;4;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;4;30000;0;30;32;1;25;32;1;4;1;0;1;1;1;2;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;5;30000;0;31;32;1;24;32;1;4;1;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;7;30000;0;30;32;1;11;32;1;4;0;1;0;1;1;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;9;30000;0;30;32;1;8;32;1;4;1;0;0;1;1;2;0;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;13;30000;0;41;32;1;15;32;-1;0;1;0;1;1;0;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;14;30000;0;9;32;1;7;32;0;-1;0;0;1;1;0;0;0;1;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;9;30000;0;15;8;1;12;32;-2;3;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;13;30000;0;30;8;1;8;32;-2;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;14;30000;0;30;32;1;26;32;-2;4;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;24;30000;0;10;8;1;1;1;0;0;1;1;1;1;1;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;25;30000;0;10;32;1;1;32;-1;4;1;0;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;26;30000;0;30;8;1;15;1;1;2;0;1;0;1;1;0;2;1;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;28;30000;0;15;8;1;7;32;-2;4;0;0;0;1;0;2;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;26;30000;0;59;8;1;25;1;0;4;0;0;0;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;28;30000;0;30;16;1;1;32;-1;2;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;32;30000;0;15;8;1;1;1;-1;-2;1;1;1;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;26;45;30000;0;20;8;1;1;32;-1;5;0;1;1;1;0;1;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;4;30000;0;16;32;1;28;32;0;4;0;0;1;1;1;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;5;30000;0;41;32;1;15;32;1;-1;0;0;0;1;1;0;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;7;30000;0;31;32;1;2;32;1;4;0;1;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;9;30000;0;41;32;1;28;32;-2;0;0;0;0;1;0;2;2;1;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;13;30000;0;15;32;1;1;32;-1;4;1;1;0;1;1;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;25;30000;0;20;8;1;1;32;-2;4;0;1;1;1;1;1;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;26;30000;0;30;16;1;31;32;0;-2;0;0;0;1;0;2;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;28;30000;0;30;16;1;1;32;0;4;1;0;1;1;0;1;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;4;30000;0;42;8;1;28;32;-1;-1;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;5;30000;0;42;8;1;7;32;-2;4;0;0;0;1;0;2;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;7;30000;0;30;8;1;5;32;1;1;0;0;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;9;30000;0;15;32;1;23;32;-1;2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;13;30000;0;30;8;1;5;32;0;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;25;30000;0;59;8;1;26;32;0;-2;0;0;0;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;26;30000;0;30;16;1;1;32;0;0;0;0;0;1;0;1;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;28;30000;0;30;16;1;1;32;0;0;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;32;30000;0;20;8;1;1;32;-2;-2;1;1;1;1;0;1;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;45;30000;0;20;8;1;1;32;1;-2;0;1;1;1;0;1;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;14;30000;0;31;8;1;12;32;-2;2;0;1;0;1;0;0;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;29;30000;0;30;8;1;23;32;1;4;1;1;0;1;0;0;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;28;45;30000;0;20;8;1;1;32;-1;3;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;14;30000;0;30;16;1;20;32;0;1;0;0;0;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;29;30000;0;30;16;1;1;32;1;-2;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;32;30000;0;20;8;1;1;32;-2;0;1;1;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;29;55;30000;0;59;8;1;1;32;-1;4;0;1;1;1;0;1;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;4;30000;0;30;16;1;27;1;-2;4;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;5;30000;0;30;32;1;10;1;-2;6;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;7;30000;0;30;32;1;27;32;1;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;9;30000;0;15;32;1;1;1;1;5;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;13;30000;0;30;32;1;17;1;-1;4;0;1;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;14;30000;0;15;8;1;1;32;1;-2;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;17;30000;0;11;32;1;1;0;-1;1;0;1;0;1;1;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;4;30000;0;41;8;1;1;1;-2;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;5;30000;0;30;8;1;13;1;1;1;0;0;0;1;0;1;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;7;30000;0;30;8;1;14;32;1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;9;30000;0;30;8;1;8;1;1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;13;30000;0;30;8;1;17;1;1;1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;14;30000;0;30;8;1;20;32;1;0;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;17;30000;0;11;32;1;1;1;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;22;30000;0;8;32;1;1;1;1;1;0;0;0;1;0;2;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;24;30000;0;8;32;1;1;1;-2;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;25;30000;0;30;32;1;1;32;1;4;0;0;0;1;0;2;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;25;30000;0;30;8;1;1;32;1;1;0;0;0;1;0;2;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;26;30000;0;8;32;1;1;0;-1;1;1;0;1;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;28;30000;0;10;8;1;1;32;-1;6;0;1;0;1;0;2;1;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;28;30000;0;10;8;1;1;32;-1;4;0;0;0;1;0;2;1;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;29;30000;0;8;32;1;1;32;-2;1;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;32;30000;0;8;32;1;1;1;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;45;30000;0;10;32;1;1;32;-1;1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;32;55;30000;0;10;32;1;1;32;-1;1;0;0;0;1;0;0;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;4;30000;0;31;32;1;17;45;-2;5;0;0;0;1;0;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;5;30000;0;27;32;1;26;45;-1;5;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;4;30000;0;61;8;1;6;45;0;-1;0;0;0;1;0;0;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;5;30000;0;30;8;1;22;45;-2;2;0;0;0;1;0;1;2;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;7;30000;0;28;32;1;2;45;-1;4;0;0;0;1;0;2;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;9;30000;0;19;32;1;1;45;1;6;0;0;0;1;0;2;0;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;13;30000;0;28;32;1;22;45;0;4;0;0;0;1;0;1;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;25;30000;0;16;8;1;1;45;-1;5;0;0;1;1;0;1;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;26;30000;0;19;8;1;21;45;0;-1;0;1;1;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;9;30000;0;27;16;1;23;45;-1;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;13;30000;0;28;8;1;5;45;-2;-1;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;25;30000;0;33;8;1;12;45;-2;1;0;0;0;1;0;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;26;30000;0;19;8;1;30;45;1;-1;0;0;0;1;0;2;2;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;28;30000;0;12;8;1;1;45;1;5;1;1;0;1;1;1;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;32;30000;0;34;8;1;31;45;-1;-2;0;1;0;1;1;1;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;32;30000;0;17;16;1;1;45;1;3;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;45;45;30000;0;12;8;1;1;45;-2;-2;0;0;1;1;1;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;29;30000;0;12;16;1;19;55;-2;2;0;0;0;1;1;0;2;1;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;32;30000;0;18;8;1;6;55;0;-2;0;1;0;1;0;0;0;1;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;55;30000;0;8;8;1;1;55;-2;0;1;0;0;1;1;1;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;17;17;30000;0;12;8;1;21;1;-2;4;1;0;1;1;1;0;2;0;0 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;17;32;30000;0;10;8;1;3;1;0;0;0;1;0;1;1;0;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;32;30000;0;59;16;1;1;55;0;-2;0;0;0;1;0;2;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;32;55;55;30000;0;60;16;1;1;55;0;2;0;0;0;1;0;1;0;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;17;17;30000;0;8;8;1;25;1;-1;-2;0;0;0;1;0;1;2;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;17;32;30000;0;6;8;1;6;1;-1;0;0;0;0;1;0;1;1;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;32;35;30000;0;11;8;1;33;35;-1;5;1;1;1;1;0;0;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;35;32;30000;0;9;8;1;21;35;0;0;0;0;0;1;0;0;2;1;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;35;35;35;30000;0;9;8;1;34;1;0;4;0;1;1;1;1;2;0;1;1 @@ -1220,9 +1220,9 @@ Intel(R) Data Center GPU Max 1550 [0x0bd5];3;36;36;36;30000;0;6;8;1;23;36;1;5;1; Intel(R) Data Center GPU Max 1550 [0x0bd5];3;40;40;40;30000;0;12;8;1;1;1;0;0;1;0;0;1;1;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;4;4;30000;0;3;45;1;36;45;0;2;0;1;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;13;13;30000;0;10;8;1;1;45;1;6;0;1;0;1;0;1;2;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;28;30000;0;19;16;1;20;45;-1;6;0;0;0;1;0;0;2;0;1 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;32;28;30000;0;16;8;1;7;45;-2;3;0;0;0;1;0;1;0;0;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;45;45;45;30000;0;30;45;1;1;45;-2;1;0;0;0;1;0;2;0;0;1 -Intel(R) Data Center GPU Max 1550 [0x0bd5];3;50;20;50;30000;0;3;8;1;1;50;1;1;0;1;0;1;0;0;0;0;0 +Intel(R) Data Center GPU Max 1550 [0x0bd5];3;50;20;50;30000;0;3;8;1;1;50;0;-2;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;76;30;30;30000;0;12;16;1;50;76;1;10;0;1;1;1;1;0;0;1;1 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;76;30;76;30000;0;8;76;1;4;76;-1;-1;0;0;0;1;0;0;0;0;0 Intel(R) Data Center GPU Max 1550 [0x0bd5];3;76;76;30;30000;0;47;16;1;1;76;0;5;0;1;0;1;0;0;0;0;0 diff --git a/src/acc/opencl/smm/tune_multiply.py b/src/acc/opencl/smm/tune_multiply.py index a6fd8e64f02..4aefbb255c1 100755 --- a/src/acc/opencl/smm/tune_multiply.py +++ b/src/acc/opencl/smm/tune_multiply.py @@ -15,7 +15,6 @@ from opentuner import Result from signal import signal, SIGINT import tempfile -import socket import shutil import copy import json @@ -53,7 +52,6 @@ class SmmTuner(MeasurementInterface): def __init__(self, args): """Setup common state and define search space""" super(SmmTuner, self).__init__(args) - dbdir = os.path.join(tempfile.gettempdir(), "opentuner") manipulator = ConfigurationManipulator() # parse and sanitize kernel shape argument if not self.args.mnk: @@ -79,7 +77,7 @@ def __init__(self, args): os.path.dirname(sys.argv[0]), "..", "..", self.exename ) self.run_result = ( # verbosity to capture device name and tuned parameters - self.launch(["ACC_OPENCL_VERBOSE=2", "CHECK=0"], nrep=1) + self.call_program(self.launch(["ACC_OPENCL_VERBOSE=2", "CHECK=0"], nrep=1)) if (self.args.merge is None or 0 > self.args.merge) and (self.args.update is None or "" == self.args.update) else None @@ -176,16 +174,15 @@ def __init__(self, args): ): # setup database (DB) if args.database is None: # adjust DB-location envrank = os.getenv("PMI_RANK", os.getenv("OMPI_COMM_WORLD_LOCAL_RANK")) + tmpdir = os.path.join(tempfile.gettempdir(), "opentuner") if envrank: self.idevice = int(envrank) % self.ndevices - directory = "{}-{}.db".format(dbdir, self.idevice) - else: - directory = "{}.db".format(dbdir) - if os.path.isdir(directory): - shutil.rmtree(directory) - os.mkdir(directory) + tmpdir += str(self.idevice) + if os.path.isdir(tmpdir): + shutil.rmtree(tmpdir) + os.mkdir(tmpdir) self.args.database = "sqlite:///" + os.path.join( - directory, "{}.db".format(socket.gethostname()) + tmpdir, "{}.db".format(os.getpid()) ) if not self.args.label: # label for DB-session self.args.label = "{}-{}-{}-s{}".format( @@ -252,7 +249,7 @@ def launch(self, envs, nrep=None, verbose=None): self.size if self.size else self.args.size, " ".join(map(str, self.mnk)), ) - return self.call_program(env_exe_args) + return env_exe_args def seed_configurations(self): return [ @@ -293,17 +290,17 @@ def run(self, desired_result, input, limit): """Run a configuration and return performance""" config = desired_result.configuration.data cfgenv = self.environment(config) - self.run_result = self.launch( + runcmd = self.launch( cfgenv + ["CHECK={}".format(self.args.check)], verbose=self.args.verbose ) - if 0 == self.run_result["returncode"]: + self.run_result = self.call_program(runcmd) + returncode = self.run_result["returncode"] + if 0 == returncode: performance = re.search( "device:\\s+([0-9]+[^ ]*) ms\\s+([0-9]+[^ ]*)", str(self.run_result["stdout"]), ) else: - failed = " ".join(map(str, cfgenv)).replace("OPENCL_LIBSMM_SMM_", "") - print("FAILED: {}".format(failed)) performance = None if performance and performance.group(1) and performance.group(2): mseconds = float(performance.group(1)) @@ -320,6 +317,12 @@ def run(self, desired_result, input, limit): # gflops are reported as "accuracy" (console output) return Result(time=mseconds, accuracy=gflops, size=kernelreq) else: # return non-competitive/bad result in case of an error + failed = ( + " ".join(map(str, cfgenv)).replace("OPENCL_LIBSMM_SMM_", "") + if not self.args.verbose + else runcmd + ) + print("FAILED ({}): {}".format(returncode, failed), flush=True) return Result(time=float("inf"), accuracy=0.0, size=100.0) def update_jsons(self, filenames): @@ -436,7 +439,7 @@ def merge_jsons(self, filenames): s = 0 if 0 < gflops: g = int(filename.split("-")[-1].split("g")[0]) - s = gflops / g # slowdown + s = gflops / g if 0 < g else 0 # slowdown if mtime < os.path.getmtime(filename): if 0 < s: retsld[1] = retsld[1] + math.log(s) @@ -469,7 +472,7 @@ def merge_jsons(self, filenames): msg = "Worse and older (delete {} @ {}x): {}" rnd = [str(round(i, 2)) for i in delsld] print(msg.format(num, "..".join(rnd), lst)) - else: + else: # delete outperformed parameter sets for file in retain + delete: try: os.remove(file) @@ -501,7 +504,7 @@ def save_final_config(self, configuration, final=True): result = self.run_result["returncode"] if config and self.run_result else 1 envchk = os.getenv("CHECK") # conside CHECKing result unless CHECK=0 if 0 == result and 0 == self.args.check and (envchk is None or "0" != envchk): - self.run_result = self.launch(cfgenv + ["CHECK=1"]) + self.run_result = self.call_program(self.launch(cfgenv + ["CHECK=1"])) result = self.run_result["returncode"] if self.run_result else 1 # extend result for easier reuse if config: @@ -842,6 +845,8 @@ def handle_sigint(self, signum, frame): # OPENCL_LIBSMM_SMM_xx=tune|enabled|on must be given to permit tuning) if os.getenv("OPENCL_LIBSMM_SMM_WS") not in default_enable_tune: os.environ["OPENCL_LIBSMM_SMM_WS"] = "{}".format(args.ws) + if os.getenv("OPENCL_LIBSMM_SMM_AL") not in default_enable_tune: + os.environ["OPENCL_LIBSMM_SMM_AL"] = "{}".format(args.al) # fix tunables according to level of tuning if 1 <= args.tlevel or 0 > args.tlevel: os.environ["OPENCL_LIBSMM_SMM_BM"] = "{}".format(args.bm) diff --git a/src/acc/opencl/smm/tune_multiply.sh b/src/acc/opencl/smm/tune_multiply.sh index 736e4058bcb..09a3f53a177 100755 --- a/src/acc/opencl/smm/tune_multiply.sh +++ b/src/acc/opencl/smm/tune_multiply.sh @@ -83,39 +83,13 @@ then break;; esac done - if [ ! "${HELP}" ] || [ "0" = "${HELP}" ]; then - ECHO=">&2 echo" - else - ECHO="echo" - fi - eval "${ECHO} \"Usage: $0 [options] []\"" - eval "${ECHO} \" Options must precede triplet specification\"" - eval "${ECHO} \" -w|--wait N: initial delay before auto-tuning (default: ${WAIT_DEFAULT} s)\"" - eval "${ECHO} \" -c|--continue: proceed with plan if tuning is interrupted\"" - eval "${ECHO} \" -u|--update: retune all JSONs found in directory (see -p)\"" - eval "${ECHO} \" -s|--batchsize N: Number of batched SMMs (a.k.a. stacksize)\"" - eval "${ECHO} \" -a|--tuning-level N=0..3: all, most, some, least tunables\"" - eval "${ECHO} \" -b|--backwards: tune in descending order of triplets\"" - eval "${ECHO} \" -t|--maxtime N: number of seconds spent per kernel\"" - eval "${ECHO} \" -p|--jsondir P: path to JSON-files (tuned params)\"" - eval "${ECHO} \" -i|--part N (1-based): Nth session out of nparts\"" - eval "${ECHO} \" -j|--nparts N: number of total sessions (see -i)\"" - eval "${ECHO} \" -r|--bound L U: limit L**3 < MNK <= U**3\"" - eval "${ECHO} \" -m|--limit N: limit any shape extent to N\"" - eval "${ECHO} \" -n|--triplets N: limit number of triplet\"" - eval "${ECHO} \" -k|--specid N: predefined triplets\"" - eval "${ECHO} \" 0-10: older to newer (larger), e.g.,\"" - eval "${ECHO} \" 0: 201 kernels\"" - eval "${ECHO} \" 10: 1266 kernels\"" - eval "${ECHO} \" , e.g., 134 kernels\"" - eval "${ECHO} \" 23, 5 32 13 24 26, 4 9\"" - eval "${ECHO}" - # default settings + # default/basic settings if [ ! "${BATCHSIZE}" ]; then BATCHSIZE=0; fi if [ ! "${JSONDIR}" ]; then JSONDIR=.; fi if [ ! "${TLEVEL}" ]; then TLEVEL=-1; fi - if [ ! "${NPARTS}" ]; then NPARTS=1; fi - if [ ! "${PART}" ]; then PART=1; fi + if [ ! "${NPARTS}" ]; then NPARTS=${PMI_SIZE:-1}; fi + if [ ! "${PART}" ]; then PART=${PMI_RANK:-0}; PART=$((PART+1)); fi + if [ ! "${WAIT}" ] && [ "1" != "${NPARTS}" ]; then WAIT=0; fi # sanity checks if [ "0" != "$((NPARTS&2 echo "ERROR: part-number ${PART} is larger than the requested ${NPARTS} parts!" @@ -124,14 +98,16 @@ then >&2 echo "ERROR: part-number must be 1-based!" exit 1 fi - HERE=$(cd "$(dirname "$0")" && pwd -P) - JSONS=$(${LS} -1 ${JSONDIR}/tune_multiply-*-*x*x*-*gflops.json 2>/dev/null) if [ "${SPECID}" ] && [ "$1" ]; then >&2 echo "ERROR: --specid and are mutual exclusive!" exit 1 - elif [ ! "${HELP}" ] || [ "0" = "${HELP}" ]; then + fi + # how to print standard vs error messages + if [ ! "${HELP}" ] || [ "0" = "${HELP}" ]; then + JSONS=$(${LS} -1 ${JSONDIR}/tune_multiply-*-*x*x*-*gflops.json 2>/dev/null) + HERE=$(cd "$(dirname "$0")" && pwd -P) + ECHO=">&2 echo" if [ "${UPDATE}" ] && [ "0" != "${UPDATE}" ]; then - if [ ! "${TLEVEL}" ] || [ "0" != "$((0>TLEVEL))" ]; then TLEVEL=1; fi MNKS=$(${SED} -n "s/.*tune_multiply-..*-\(..*x..*x.[^-]*\)-..*gflops\.json/\1/p" <<<"${JSONS}" \ | ${SORT} -u -n -tx -k1,1 -k2,2 -k3,3) elif [ "${SPECID}" ]; then @@ -140,7 +116,32 @@ then MNKS=$(eval "${HERE}/../../acc_triplets.sh $* 2>/dev/null") fi else - exit 0 + ECHO="echo" + fi + if [ ! "${WAIT}" ] || [[ ("${HELP}" && "0" != "${HELP}") ]]; then + eval "${ECHO} \"Usage: $0 [options] []\"" + eval "${ECHO} \" Options must precede triplet specification\"" + eval "${ECHO} \" -w|--wait N: initial delay before auto-tuning (default: ${WAIT_DEFAULT} s)\"" + eval "${ECHO} \" -c|--continue: proceed with plan if tuning is interrupted\"" + eval "${ECHO} \" -u|--update: retune all JSONs found in directory (see -p)\"" + eval "${ECHO} \" -s|--batchsize N: Number of batched SMMs (a.k.a. stacksize)\"" + eval "${ECHO} \" -a|--tuning-level N=0..3: all, most, some, least tunables\"" + eval "${ECHO} \" -b|--backwards: tune in descending order of triplets\"" + eval "${ECHO} \" -t|--maxtime N: number of seconds spent per kernel\"" + eval "${ECHO} \" -p|--jsondir P: path to JSON-files (tuned params)\"" + eval "${ECHO} \" -i|--part N (1-based): Nth session out of nparts\"" + eval "${ECHO} \" -j|--nparts N: number of total sessions (see -i)\"" + eval "${ECHO} \" -r|--bound L U: limit L**3 < MNK <= U**3\"" + eval "${ECHO} \" -m|--limit N: limit any shape extent to N\"" + eval "${ECHO} \" -n|--triplets N: limit number of triplet\"" + eval "${ECHO} \" -k|--specid N: predefined triplets\"" + eval "${ECHO} \" 0-10: older to newer (larger), e.g.,\"" + eval "${ECHO} \" 0: 201 kernels\"" + eval "${ECHO} \" 10: 1266 kernels\"" + eval "${ECHO} \" , e.g., 134 kernels\"" + eval "${ECHO} \" 23, 5 32 13 24 26, 4 9\"" + eval "${ECHO}" + if [ "${HELP}" ] && [ "0" != "${HELP}" ]; then exit 0; fi fi if [ "${MNKS}" ]; then if [ "${BOUNDL}" ] || [ "${BOUNDU}" ]; then @@ -184,13 +185,12 @@ then >&2 echo "ERROR: invalid or no given!" exit 1 fi - PARTSIZE=$(((NTRIPLETS+NPARTS-1)/NPARTS)) - PARTOFFS=$(((PART-1)*PARTSIZE)) - PARTSIZE=$((PARTSIZE<=(NTRIPLETS-PARTOFFS)?PARTSIZE:(NTRIPLETS-PARTOFFS))) - if [ "0" != "$((NPARTS<=NTRIPLETS))" ]; then - echo "Session ${PART} of ${NPARTS} part(s)." - else - echo "Session ${PART} of ${NPARTS} part(s). The problem is over-decomposed!" + if [ ! "${WAIT}" ] || [ "0" != "${WAIT}" ]; then + if [ "0" != "$((NPARTS<=NTRIPLETS))" ]; then + echo "Session ${PART} of ${NPARTS} part(s)." + else + echo "Session ${PART} of ${NPARTS} part(s). The problem is over-decomposed!" + fi fi if [ ! "${MAXTIME}" ] && [[ (! "${CONTINUE}" || \ "${CONTINUE}" = "false" || \ @@ -199,11 +199,16 @@ then then MAXTIME=160 fi + PARTSIZE=$((NPARTS Null() END TYPE private_item_type_${keytype}$_${valuetype}$ @@ -58,8 +58,8 @@ MODULE dbcsr_dict ! this is a public type, its returned by dict_items() TYPE dict_${keytype}$_${valuetype}$_item_type - ${keytype_fort}$ :: key - ${valuetype_fort}$ :: value + ${keytype_fort}$ :: key ${key_assign}$${default_key}$ + ${valuetype_fort}$ :: value ${value_assign}$${default_value}$ END TYPE dict_${keytype}$_${valuetype}$_item_type #:endfor @@ -111,7 +111,7 @@ MODULE dbcsr_dict $:fct #:endfor - #:for keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal in inst_params + #:for keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value in inst_params SUBROUTINE dict_${keytype}$_${valuetype}$_init(dict, initial_capacity) !! Allocates the internal data-structures of the given dictionary. diff --git a/src/core/dbcsr_dict.fypp b/src/core/dbcsr_dict.fypp index 9a93027af01..64200a8b27e 100644 --- a/src/core/dbcsr_dict.fypp +++ b/src/core/dbcsr_dict.fypp @@ -18,6 +18,8 @@ #:set valuetype_fort = ['INTEGER(kind=int_4)', 'TYPE(call_stat_type), POINTER'] #:set key_assign = ['=', '='] #:set value_assign = ['=', '=>'] +#:set default_key = ['""', '-1_int_4'] +#:set default_value = ['-1_int_4', 'NULL()'] #:def isequal_str(k1, k2) ${k1}$ == ${k2}$ @@ -68,7 +70,7 @@ END FUNCTION hash_i4tuple #:set usetimings = ['call_stat_type'] -#:set inst_params = list(zip(keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal)) +#:set inst_params = list(zip(keytype, valuetype, keytype_fort, valuetype_fort, key_assign, value_assign, isequal, default_key, default_value)) #:def uselist(list_in) #! comma-separated list of unique entries of list_in diff --git a/src/core/dbcsr_iter_types.F b/src/core/dbcsr_iter_types.F index 4aa0ab328ff..6abb816eeea 100644 --- a/src/core/dbcsr_iter_types.F +++ b/src/core/dbcsr_iter_types.F @@ -30,13 +30,13 @@ MODULE dbcsr_iter_types !! contains the information about the current state of the program !! to be able to decide if output is necessary - INTEGER :: ref_count, id_nr - INTEGER :: print_level, n_rlevel - INTEGER, DIMENSION(:), POINTER :: iteration - LOGICAL, DIMENSION(:), POINTER :: last_iter - CHARACTER(len=default_string_length) :: project_name + INTEGER :: ref_count = -1, id_nr = -1 + INTEGER :: print_level = -1, n_rlevel = -1 + INTEGER, DIMENSION(:), POINTER :: iteration => NULL() + LOGICAL, DIMENSION(:), POINTER :: last_iter => NULL() + CHARACTER(len=default_string_length) :: project_name = "" CHARACTER(LEN=default_string_length), & - DIMENSION(:), POINTER :: level_name + DIMENSION(:), POINTER :: level_name => NULL() END TYPE dbcsr_iteration_info_type CONTAINS diff --git a/src/core/dbcsr_lib.F b/src/core/dbcsr_lib.F index 5a0fd79b903..401abe931da 100644 --- a/src/core/dbcsr_lib.F +++ b/src/core/dbcsr_lib.F @@ -15,7 +15,7 @@ MODULE dbcsr_lib USE dbcsr_config, ONLY: set_accdrv_active_device_id, & reset_accdrv_active_device_id, & dbcsr_set_config, & - has_acc + use_acc USE dbcsr_kinds, ONLY: int_1_size, & int_2_size, & int_4_size, & @@ -213,14 +213,14 @@ SUBROUTINE dbcsr_init_lib_pre(mp_comm, io_unit, accdrv_active_device_id) #endif ! Initialize Acc and set active device - IF (has_acc) THEN + IF (use_acc()) THEN IF (PRESENT(accdrv_active_device_id)) THEN CALL set_accdrv_active_device_id(accdrv_active_device_id) ELSEIF (dbcsr_acc_get_ndevices() > 0) THEN ! Use round-robin assignment per rank CALL set_accdrv_active_device_id(MOD(mynode, dbcsr_acc_get_ndevices())) ELSE - DBCSR_ABORT("dbcsr_init_lib: No recongnized GPU devices") + DBCSR_ABORT("dbcsr_init_lib: No recognized GPU devices") END IF CALL acc_init() END IF @@ -313,7 +313,7 @@ SUBROUTINE dbcsr_finalize_lib() #endif ! Reset Acc ID CALL reset_accdrv_active_device_id() - IF (has_acc) THEN + IF (use_acc()) THEN CALL acc_finalize() END IF diff --git a/src/core/dbcsr_log_handling.F b/src/core/dbcsr_log_handling.F index 3d55445c95b..f81e1c005ee 100644 --- a/src/core/dbcsr_log_handling.F +++ b/src/core/dbcsr_log_handling.F @@ -98,30 +98,30 @@ MODULE dbcsr_log_handling !! are public. !! DO NOT USE THE INTERNAL COMPONENTS DIRECTLY!!! - INTEGER :: id_nr, ref_count + INTEGER :: id_nr = -1, ref_count = -1 !! unique number to identify the logger !! reference count (see cp2k/doc/ReferenceCounting.html) - INTEGER :: print_level + INTEGER :: print_level = -1 !! the level starting at which something gets printed - INTEGER :: default_local_unit_nr + INTEGER :: default_local_unit_nr = -1 !! default unit for local logging (-1 if not yet initialized). Local logging guarantee to each task its own file. - INTEGER :: default_global_unit_nr + INTEGER :: default_global_unit_nr = -1 !! default unit for global logging (-1 if not yet initialized). This unit is valid only on the processor with !! %mp_env%mp%mynode==%mv_env%mp%source. - LOGICAL :: close_local_unit_on_dealloc, close_global_unit_on_dealloc + LOGICAL :: close_local_unit_on_dealloc = .FALSE., close_global_unit_on_dealloc = .FALSE. !! if the local unit should be closed when this logger is deallocated !! whether the global unit should be closed when this logger is deallocated - CHARACTER(len=default_string_length) :: suffix + CHARACTER(len=default_string_length) :: suffix = "" !! a short string that is used as suffix in all the filenames created by this logger. Can be used to guarantee the !! uniqueness of generated filename - CHARACTER(len=default_path_length) :: local_filename, global_filename + CHARACTER(len=default_path_length) :: local_filename = "", global_filename = "" !! the root of the name of the file used for local logging (can be different from the name of the file corresponding to !! default_local_unit_nr, only the one used if the unit needs to be opened) !! the root of the name of the file used for global logging (can be different from the name of the file corresponding to !! default_global_unit_nr, only the one used if the unit needs to be opened) - TYPE(dbcsr_mp_obj) :: mp_env + TYPE(dbcsr_mp_obj) :: mp_env = dbcsr_mp_obj() !! the parallel environment for the output. - TYPE(dbcsr_iteration_info_type), POINTER :: iter_info + TYPE(dbcsr_iteration_info_type), POINTER :: iter_info => NULL() END TYPE dbcsr_logger_type TYPE dbcsr_logger_p_type diff --git a/src/core/dbcsr_timings_base_type.F b/src/core/dbcsr_timings_base_type.F index 6f400c0d31d..5f1fd6a4d89 100644 --- a/src/core/dbcsr_timings_base_type.F +++ b/src/core/dbcsr_timings_base_type.F @@ -22,32 +22,32 @@ MODULE dbcsr_timings_base_type PRIVATE TYPE routine_stat_type - INTEGER :: routine_id - CHARACTER(len=default_string_length) :: routineN - REAL(kind=dp) :: excl_walltime_accu - REAL(kind=dp) :: incl_walltime_accu - REAL(kind=dp) :: excl_energy_accu - REAL(kind=dp) :: incl_energy_accu - INTEGER :: active_calls - INTEGER :: total_calls - INTEGER :: stackdepth_accu - LOGICAL :: trace + INTEGER :: routine_id = -1 + CHARACTER(len=default_string_length) :: routineN = "" + REAL(kind=dp) :: excl_walltime_accu = -1.0_dp + REAL(kind=dp) :: incl_walltime_accu = -1.0_dp + REAL(kind=dp) :: excl_energy_accu = -1.0_dp + REAL(kind=dp) :: incl_energy_accu = -1.0_dp + INTEGER :: active_calls = -1 + INTEGER :: total_calls = -1 + INTEGER :: stackdepth_accu = -1 + LOGICAL :: trace = .FALSE. END TYPE routine_stat_type TYPE call_stat_type - INTEGER :: total_calls - REAL(kind=dp) :: incl_walltime_accu - REAL(kind=dp) :: incl_energy_accu + INTEGER :: total_calls = -1 + REAL(kind=dp) :: incl_walltime_accu = -1.0_dp + REAL(kind=dp) :: incl_energy_accu = -1.0_dp END TYPE call_stat_type TYPE callstack_entry_type - INTEGER :: routine_id - REAL(kind=dp) :: walltime_start - REAL(kind=dp) :: energy_start + INTEGER :: routine_id = -1 + REAL(kind=dp) :: walltime_start = -1.0_dp + REAL(kind=dp) :: energy_start = -1.0_dp END TYPE callstack_entry_type TYPE routine_report_type - CHARACTER(LEN=default_string_length) :: routineN + CHARACTER(LEN=default_string_length) :: routineN = "" REAL(KIND=dp) :: max_icost = 0.0_dp REAL(KIND=dp) :: sum_icost = 0.0_dp REAL(KIND=dp) :: max_ecost = 0.0_dp diff --git a/src/core/dbcsr_timings_types.F b/src/core/dbcsr_timings_types.F index 42dd66fe5d9..b16e1c49016 100644 --- a/src/core/dbcsr_timings_types.F +++ b/src/core/dbcsr_timings_types.F @@ -22,15 +22,15 @@ MODULE dbcsr_timings_types PRIVATE TYPE timer_env_type - INTEGER :: ref_count - TYPE(dict_str_i4_type) :: routine_names - TYPE(list_routinestat_type) :: routine_stats - TYPE(list_callstackentry_type) :: callstack - TYPE(dict_i4tuple_callstat_type) :: callgraph - INTEGER :: trace_max - INTEGER :: trace_unit - CHARACTER(len=13) :: trace_str - LOGICAL :: trace_all + INTEGER :: ref_count = -1 + TYPE(dict_str_i4_type) :: routine_names = dict_str_i4_type() + TYPE(list_routinestat_type) :: routine_stats = list_routinestat_type() + TYPE(list_callstackentry_type) :: callstack = list_callstackentry_type() + TYPE(dict_i4tuple_callstat_type) :: callgraph = dict_i4tuple_callstat_type() + INTEGER :: trace_max = -1 + INTEGER :: trace_unit = -1 + CHARACTER(len=13) :: trace_str = "" + LOGICAL :: trace_all = .FALSE. END TYPE timer_env_type PUBLIC :: timer_env_type diff --git a/src/core/dbcsr_types.F b/src/core/dbcsr_types.F index dd6921ceab0..0c175889be8 100644 --- a/src/core/dbcsr_types.F +++ b/src/core/dbcsr_types.F @@ -143,13 +143,13 @@ MODULE dbcsr_types TYPE dbcsr_distribution_type !! Matrix distribution on the processor grid - TYPE(array_i1d_obj) :: row_dist_block, col_dist_block + TYPE(array_i1d_obj) :: row_dist_block = array_i1d_obj(), col_dist_block = array_i1d_obj() !! standard row distributions of matrix elements' rows into processor grid rows !! standard column distributions of matrix elements' columns into processor grid columns - TYPE(array_i1d_obj) :: local_rows, local_cols + TYPE(array_i1d_obj) :: local_rows = array_i1d_obj(), local_cols = array_i1d_obj() !! list of rows local to the processor grid row !! list of columns local to the processor grid column - INTEGER :: max_row_dist, max_col_dist + INTEGER :: max_row_dist = -1, max_col_dist = -1 TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_l_rows => Null() !! local rows for each process row TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_l_cols => Null() @@ -158,24 +158,24 @@ MODULE dbcsr_types !! other_rows is defined LOGICAL :: has_other_l_cols = .FALSE. !! other_cols is defined - TYPE(array_i1d_obj) :: global_row_map + TYPE(array_i1d_obj) :: global_row_map = array_i1d_obj() !! mapping from rows to sequence in local rows (global to local mapping) - TYPE(array_i1d_obj) :: global_col_map + TYPE(array_i1d_obj) :: global_col_map = array_i1d_obj() !! mapping from rows to sequence in local columns (global to local mapping) LOGICAL :: has_global_row_map = .FALSE. !! whether other_row_map is defined LOGICAL :: has_global_col_map = .FALSE. !! whether other_col_map is defined - TYPE(array_i1d_obj) :: row_map + TYPE(array_i1d_obj) :: row_map = array_i1d_obj() !! distribution map for rows - TYPE(array_i1d_obj) :: col_map + TYPE(array_i1d_obj) :: col_map = array_i1d_obj() !! distribution map for columns LOGICAL :: has_thread_dist = .FALSE. - TYPE(array_i1d_obj) :: thread_dist + TYPE(array_i1d_obj) :: thread_dist = array_i1d_obj() !! thread distribution (of the rows) INTEGER :: num_threads = -1 !! number of threads in the environment - TYPE(dbcsr_mp_obj) :: mp_env + TYPE(dbcsr_mp_obj) :: mp_env = dbcsr_mp_obj() !! multiprocessor environment on which the distribution is based INTEGER :: refcount = 0 !! reference counter @@ -193,11 +193,11 @@ MODULE dbcsr_types !! mapped to 8 "virtual" processor rows, then there are two images for !! every real processor row. - TYPE(dbcsr_distribution_obj) :: main + TYPE(dbcsr_distribution_obj) :: main = dbcsr_distribution_obj() !! the main distribution - TYPE(array_i1d_obj) :: row_image + TYPE(array_i1d_obj) :: row_image = array_i1d_obj() !! distribution of matrix elements' rows into image rows - TYPE(array_i1d_obj) :: col_image + TYPE(array_i1d_obj) :: col_image = array_i1d_obj() !! distribution of matrix elements' columns into image columns INTEGER :: row_decimation = -1 !! Number of imaged rows mapped to a real row @@ -207,12 +207,12 @@ MODULE dbcsr_types !! Number of real rows mapped to a virtual row INTEGER :: col_multiplicity = -1 !! Number of real columns mapped to a virtual column - TYPE(array_i1d_obj) :: vrow_dist - TYPE(array_i1d_obj) :: vcol_dist + TYPE(array_i1d_obj) :: vrow_dist = array_i1d_obj() + TYPE(array_i1d_obj) :: vcol_dist = array_i1d_obj() TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_vl_rows => Null() TYPE(array_i1d_obj), DIMENSION(:), POINTER :: other_vl_cols => Null() - TYPE(array_i1d_obj) :: global_vrow_map - TYPE(array_i1d_obj) :: global_vcol_map + TYPE(array_i1d_obj) :: global_vrow_map = array_i1d_obj() + TYPE(array_i1d_obj) :: global_vcol_map = array_i1d_obj() LOGICAL :: has_other_vl_rows = .FALSE. LOGICAL :: has_other_vl_cols = .FALSE. LOGICAL :: has_global_vrow_map = .FALSE. @@ -246,7 +246,7 @@ MODULE dbcsr_types !! Buffers INTEGER, DIMENSION(:, :), POINTER :: rcb => Null() !! Row and column and offset and dimensions of data in the buffer - TYPE(dbcsr_data_obj) :: main + TYPE(dbcsr_data_obj) :: main = dbcsr_data_obj() !! Main memory TYPE(dbcsr_data_obj), DIMENSION(:), POINTER :: backing => Null() !! Backing memory (in lieu of main memory) @@ -270,7 +270,7 @@ MODULE dbcsr_types TYPE(dbcsr_type), POINTER :: matrix => Null() !! the matrix - TYPE(dbcsr_block_buffer_obj) :: buffer_2d + TYPE(dbcsr_block_buffer_obj) :: buffer_2d = dbcsr_block_buffer_obj() !! Buffers for repointing 2d pointers (1 per thread) INTEGER :: pos = -1 !! Current position (per thread) @@ -313,19 +313,19 @@ MODULE dbcsr_types !! Mapping of local rows to global rows (if local indexing is enabled) INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: global_rows => Null() !! Mapping of global rows to local rows (if local indexing is enabled) - TYPE(dbcsr_data_obj) :: data_area + TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() END TYPE dbcsr_iterator TYPE dbcsr_mutable_type !! Data area with random access reads, insertions, and deletions. - TYPE(btree_i8_sp2d) :: btree_s + TYPE(btree_i8_sp2d) :: btree_s = btree_i8_sp2d() !! Data types for the various types - TYPE(btree_i8_dp2d) :: btree_d + TYPE(btree_i8_dp2d) :: btree_d = btree_i8_dp2d() !! Data types for the various types - TYPE(btree_i8_cp2d) :: btree_c + TYPE(btree_i8_cp2d) :: btree_c = btree_i8_cp2d() !! Data types for the various types - TYPE(btree_i8_zp2d) :: btree_z + TYPE(btree_i8_zp2d) :: btree_z = btree_i8_zp2d() !! Data types for the various types INTEGER :: refcount = 0 !! Reference counter @@ -341,7 +341,7 @@ MODULE dbcsr_types TYPE dbcsr_work_type !! Used for assembling a real matrix. - TYPE(dbcsr_data_obj) :: data_area + TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() !! holds actual values. INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: row_i => Null() !! the row index of all of the blocks. @@ -354,9 +354,9 @@ MODULE dbcsr_types INTEGER :: datasize = -1 !! the actual size of data present in the data element INTEGER :: datasize_after_filtering = -1 - !TYPE(btree_i8_dp2d) :: tree + !TYPE(btree_i8_dp2d) :: tree = btree_i8_dp2d() !! tree used to index data blocks (alternative to the row_i, col_i, and blk_p indices when index is scattered). - TYPE(dbcsr_mutable_obj) :: mutable + TYPE(dbcsr_mutable_obj) :: mutable = dbcsr_mutable_obj() !! the final bcsr matrix END TYPE dbcsr_work_type @@ -562,7 +562,7 @@ MODULE dbcsr_types TYPE(dbcsr_type), DIMENSION(:), POINTER :: mats => Null() !! the matrices - TYPE(dbcsr_imagedistribution_obj) :: image_dist + TYPE(dbcsr_imagedistribution_obj) :: image_dist = dbcsr_imagedistribution_obj() !! image distribution END TYPE dbcsr_1d_array_type @@ -571,7 +571,7 @@ MODULE dbcsr_types TYPE(dbcsr_type), DIMENSION(:, :), POINTER :: mats => Null() !! the matrices - TYPE(dbcsr_imagedistribution_obj) :: image_dist + TYPE(dbcsr_imagedistribution_obj) :: image_dist = dbcsr_imagedistribution_obj() !! image distribution END TYPE dbcsr_2d_array_type diff --git a/src/data/dbcsr_data_types.F b/src/data/dbcsr_data_types.F index 13462f4d24c..cef186a0512 100644 --- a/src/data/dbcsr_data_types.F +++ b/src/data/dbcsr_data_types.F @@ -43,15 +43,15 @@ MODULE dbcsr_data_types !! Reasoning !! Easier routine interfaces - REAL(KIND=real_4) :: r_sp + REAL(KIND=real_4) :: r_sp = -1.0_real_4 !! stores real values in single precision - REAL(KIND=real_8) :: r_dp + REAL(KIND=real_8) :: r_dp = -1.0_real_8 !! stores real values in double precision - COMPLEX(KIND=real_4) :: c_sp + COMPLEX(KIND=real_4) :: c_sp = (-1.0_real_4, -1.0_real_4) !! stores complex values in single precision - COMPLEX(KIND=real_8) :: c_dp + COMPLEX(KIND=real_8) :: c_dp = (-1.0_real_8, -1.0_real_8) !! stores complex values in double precision - INTEGER :: data_type + INTEGER :: data_type = -1 !! which of the data types is actually used END TYPE dbcsr_scalar_type @@ -63,11 +63,11 @@ MODULE dbcsr_data_types !! Memory related types TYPE(dbcsr_mempool_entry_type), POINTER :: root => Null() INTEGER :: capacity = 1 -!$ INTEGER(KIND=omp_lock_kind) :: lock +!$ INTEGER(KIND=omp_lock_kind) :: lock = -1_omp_lock_kind END TYPE dbcsr_mempool_type TYPE dbcsr_mempool_entry_type - TYPE(dbcsr_data_obj) :: area + TYPE(dbcsr_data_obj) :: area = dbcsr_data_obj() TYPE(dbcsr_mempool_entry_type), POINTER :: next => Null() END TYPE dbcsr_mempool_entry_type @@ -109,8 +109,8 @@ MODULE dbcsr_data_types !! type of memory where data lives INTEGER :: data_type = -1 !! which of the data types is actually used - TYPE(acc_devmem_type) :: acc_devmem - TYPE(acc_event_type) :: acc_ready + TYPE(acc_devmem_type) :: acc_devmem = acc_devmem_type() + TYPE(acc_event_type) :: acc_ready = acc_event_type() END TYPE dbcsr_data_area_type ! Type definitions: diff --git a/src/dbcsr_api.F b/src/dbcsr_api.F index 84493d08e57..d28060357ea 100644 --- a/src/dbcsr_api.F +++ b/src/dbcsr_api.F @@ -306,7 +306,7 @@ MODULE dbcsr_api ! ----------------------------------------------------------------------------------------------- TYPE dbcsr_type - TYPE(dbcsr_prv_type), PRIVATE :: prv + TYPE(dbcsr_prv_type), PRIVATE :: prv = dbcsr_prv_type() END TYPE dbcsr_type TYPE dbcsr_p_type @@ -316,11 +316,11 @@ MODULE dbcsr_api ! the components of this type must remain private to encapsulate better the internals ! of the dbcsr library. TYPE dbcsr_distribution_type - TYPE(dbcsr_dist_prv_obj), PRIVATE :: prv + TYPE(dbcsr_dist_prv_obj), PRIVATE :: prv = dbcsr_dist_prv_obj() END TYPE dbcsr_distribution_type TYPE dbcsr_iterator_type - TYPE(dbcsr_iterator_prv), PRIVATE :: prv + TYPE(dbcsr_iterator_prv), PRIVATE :: prv = dbcsr_iterator_prv() END TYPE dbcsr_iterator_type INTERFACE dbcsr_create diff --git a/src/mm/dbcsr_acc_operations.F b/src/mm/dbcsr_acc_operations.F index c57fa51474d..d9b9d10040f 100644 --- a/src/mm/dbcsr_acc_operations.F +++ b/src/mm/dbcsr_acc_operations.F @@ -75,7 +75,7 @@ END FUNCTION libsmm_acc_transpose_cu SUBROUTINE dbcsr_acc_do_mm_stack(param_stack_host, param_stack_dev, stack_size, data_type, & a_data, b_data, c_data, m_max, n_max, k_max, def_mnk, & - stack_stream, c_stream, success) + stack_stream, c_stream, success, generated_acc_untuned) !! Launch an accelerated kernel for processing a stack. INTEGER, DIMENSION(:, :), TARGET, INTENT(IN) :: param_stack_host TYPE(acc_devmem_type), INTENT(IN) :: param_stack_dev @@ -86,7 +86,7 @@ SUBROUTINE dbcsr_acc_do_mm_stack(param_stack_host, param_stack_dev, stack_size, INTEGER, INTENT(IN) :: m_max, n_max, k_max LOGICAL, INTENT(IN) :: def_mnk TYPE(acc_stream_type), INTENT(IN) :: stack_stream, c_stream - LOGICAL, INTENT(INOUT) :: success + LOGICAL, INTENT(INOUT) :: success, generated_acc_untuned #if ! defined (__DBCSR_ACC) MARK_USED(param_stack_host) MARK_USED(param_stack_dev) @@ -102,6 +102,7 @@ SUBROUTINE dbcsr_acc_do_mm_stack(param_stack_host, param_stack_dev, stack_size, MARK_USED(stack_stream) MARK_USED(c_stream) MARK_USED(success) + MARK_USED(generated_acc_untuned) DBCSR_ABORT("__DBCSR_ACC not compiled in.") #else CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_acc_do_mm_stack' @@ -132,7 +133,8 @@ SUBROUTINE dbcsr_acc_do_mm_stack(param_stack_host, param_stack_dev, stack_size, mnk, acc_stream_cptr(stack_stream), acc_stream_cptr(c_stream)) ! IF (istat == -10) DBCSR_ABORT("Data type not supported with GPU backend.") ! IF (istat == -20) DBCSR_ABORT("GPU kernel not JIT-ed.") - success = (istat == 0) ! false if no suitable kernel was found + success = (istat .GE. 0) ! false if no suitable kernel was found + generated_acc_untuned = (istat == 10) ! Generated default untuned kernel IF (careful_mod) CALL timestop(error_handle) #endif diff --git a/src/mm/dbcsr_mm.F b/src/mm/dbcsr_mm.F index ba1d29ed204..b3d475310e6 100644 --- a/src/mm/dbcsr_mm.F +++ b/src/mm/dbcsr_mm.F @@ -26,7 +26,7 @@ MODULE dbcsr_mm USE dbcsr_config, ONLY: dbcsr_cfg, & dbcsr_set_config, & default_resize_factor, & - has_acc + use_acc USE dbcsr_data_methods, ONLY: dbcsr_data_set_size_referenced, & dbcsr_scalar_are_equal, & dbcsr_scalar_one, & @@ -153,7 +153,7 @@ SUBROUTINE dbcsr_multiply_lib_init() ! Each thread has its own working-matrix and its own mempool ALLOCATE (memtype_product_wm(ithread)%p) - CALL dbcsr_memtype_setup(memtype_product_wm(ithread)%p, has_pool=dbcsr_cfg%use_mempools_cpu%val .OR. has_acc) + CALL dbcsr_memtype_setup(memtype_product_wm(ithread)%p, has_pool=dbcsr_cfg%use_mempools_cpu%val .OR. use_acc()) CALL dbcsr_mempool_limit_capacity(memtype_product_wm(ithread)%p%pool, capacity=MAX(1, dbcsr_cfg%num_layers_3D%val)) END SUBROUTINE dbcsr_multiply_lib_init @@ -438,7 +438,7 @@ SUBROUTINE dbcsr_multiply_generic(transa, transb, & CALL array_nullify(dense_row_sizes) ! Reset GPU errors - IF (has_acc) THEN + IF (use_acc()) THEN CALL dbcsr_acc_clear_errors() END IF @@ -447,12 +447,12 @@ SUBROUTINE dbcsr_multiply_generic(transa, transb, & ! give any performance benefit) CALL check_openmpi_rma() - use_mempools = dbcsr_cfg%use_mempools_cpu%val .OR. has_acc + use_mempools = dbcsr_cfg%use_mempools_cpu%val .OR. use_acc() ! setup driver-dependent memory-types and their memory-pools --------------- ! the ab_buffers are shared by all threads - IF (has_acc) THEN + IF (use_acc()) THEN IF (.NOT. acc_stream_associated(stream_1)) THEN CALL acc_stream_create(stream_1, "MemCpy (odd ticks)") CALL acc_stream_create(stream_2, "MemCpy (even ticks)") @@ -616,7 +616,7 @@ SUBROUTINE dbcsr_multiply_generic(transa, transb, & END IF ab_dense = use_dense_mult ! Use memory pools when no dense - IF (.NOT. has_acc) THEN + IF (.NOT. use_acc()) THEN CALL dbcsr_memtype_setup(memtype_abpanel_1, has_pool=.NOT. ab_dense .AND. use_mempools, mpi=.TRUE.) CALL dbcsr_memtype_setup(memtype_abpanel_2, has_pool=.NOT. ab_dense .AND. use_mempools, mpi=.TRUE.) END IF diff --git a/src/mm/dbcsr_mm_3d.F b/src/mm/dbcsr_mm_3d.F index 8974bd6aa40..b25b360abd7 100644 --- a/src/mm/dbcsr_mm_3d.F +++ b/src/mm/dbcsr_mm_3d.F @@ -28,7 +28,7 @@ MODULE dbcsr_mm_3d dbcsr_data_clear, & dbcsr_data_set USE dbcsr_config, ONLY: dbcsr_cfg, & - has_acc + use_acc USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_exists, & dbcsr_data_get_memory_type, dbcsr_data_get_size, dbcsr_data_get_size_referenced, & @@ -119,29 +119,29 @@ MODULE dbcsr_mm_3d LOGICAL, PARAMETER :: careful_mod = .FALSE. TYPE dbcsr_buffer - TYPE(dbcsr_data_obj) :: DATA, & - data_before_resize, & - trs_stackbuf - INTEGER :: vprow, vpcol + TYPE(dbcsr_data_obj) :: DATA = dbcsr_data_obj(), & + data_before_resize = dbcsr_data_obj(), & + trs_stackbuf = dbcsr_data_obj() + INTEGER :: vprow = -1, vpcol = -1 INTEGER :: myproc = -1 TYPE(mp_comm_type) :: grp = mp_comm_null, & ! Global communicator subgrp = mp_comm_null ! Communicator for A and B - TYPE(mp_win_type) :: data_win, meta_win + TYPE(mp_win_type) :: data_win = mp_win_type(), meta_win = mp_win_type() INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: meta => Null(), & meta_before_resize => Null(), & meta_red3D => Null() TYPE(mp_request_type), DIMENSION(2) :: get_requests = mp_request_null - INTEGER :: meta_size + INTEGER :: meta_size = -1 INTEGER :: num_layers_3D = 1 INTEGER :: coord3D = 1 - TYPE(dbcsr_type) :: matrix + TYPE(dbcsr_type) :: matrix = dbcsr_type() LOGICAL :: is_valid = .FALSE., & is_comm = .FALSE., & has_rma_win = .FALSE. END TYPE dbcsr_buffer TYPE dbcsr_buffers - TYPE(dbcsr_buffer) :: left, right + TYPE(dbcsr_buffer) :: left = dbcsr_buffer(), right = dbcsr_buffer() END TYPE dbcsr_buffers TYPE mn_local_sizes @@ -158,7 +158,7 @@ MODULE dbcsr_mm_3d ! Use a buffer per each thread TYPE(dbcsr_data_obj), & DIMENSION(:), ALLOCATABLE :: data_red3D - INTEGER :: data_type + INTEGER :: data_type = -1 END TYPE dbcsr_layers_3D_C_reduction ! Buffers @@ -1436,7 +1436,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, & capacity=2) - IF (has_acc) THEN + IF (use_acc()) THEN ! enumerate the blocksizes to keep the following 2D-arrays small. CALL enumerate_blk_sizes(matrix_right%row_blk_size%low%data, & dbcsr_max_row_size(matrix_right), & @@ -1544,7 +1544,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & ! ! Evaluate sizes for workspaces size_guess_init = 1 - IF (.NOT. keep_sparsity .AND. has_acc) THEN + IF (.NOT. keep_sparsity .AND. use_acc()) THEN size_guess_init = product_matrix_size_guess(matrix_left, matrix_right, product_matrix, & left_max_data_size, right_max_data_size, & left_col_nimages, right_row_nimages, & @@ -1733,7 +1733,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & IF (is_not_comm) THEN ! Right IF (do_comm_right(icol3D)) THEN - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_right", handle2) CALL acc_event_synchronize(right_buffer_p%data%d%acc_ready) CALL timestop(handle2) @@ -1749,7 +1749,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & END IF ! Left IF (do_comm_left(irow3D)) THEN - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_left", handle2) CALL acc_event_synchronize(left_buffer_p%data%d%acc_ready) CALL timestop(handle2) @@ -1967,7 +1967,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & ileft_buffer_calc = MIN(ileft_buffer_calc, nbuffers_norms) ! check if right matrix was already initialized IF (.NOT. right_buffer_p%matrix%valid) THEN - IF (has_acc) CALL dbcsr_data_host2dev(right_buffer_p%data) + IF (use_acc()) CALL dbcsr_data_host2dev(right_buffer_p%data) ! Repoint indices of matrices CALL make_meta(right_buffer_p, & right_row_total_nimages, & @@ -1985,7 +1985,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & right_norms(:, iright_buffer_calc), & k_sizes, n_sizes(icol3D)%sizes) END IF - IF (has_acc) THEN + IF (use_acc()) THEN CALL acc_transpose_blocks(right_buffer_p%matrix, & right_buffer_p%trs_stackbuf, & k_sizes, n_sizes(icol3D)%sizes, & @@ -1996,7 +1996,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & END IF ! check if left matrix was already initialized IF (.NOT. left_buffer_p%matrix%valid) THEN - IF (has_acc) CALL dbcsr_data_host2dev(left_buffer_p%data) + IF (use_acc()) CALL dbcsr_data_host2dev(left_buffer_p%data) ! Repoint indices of matrices CALL make_meta(left_buffer_p, & left_col_total_nimages, & @@ -2012,7 +2012,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & END IF END IF ! Wait for left and right buffers transfer to device before proceeding - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_sync_h2d", handle2) CALL acc_device_synchronize() CALL timestop(handle2) @@ -2224,7 +2224,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & CALL dbcsr_data_release(right_buffers(v_ki)%data) NULLIFY (right_buffers(v_ki)%matrix%index) CALL dbcsr_release(right_buffers(v_ki)%matrix) - IF (has_acc) THEN + IF (use_acc()) THEN CALL dbcsr_data_clear_pointer(right_buffers(v_ki)%trs_stackbuf) IF (right_buffers(v_ki)%trs_stackbuf%d%memory_type%acc_devalloc) THEN CALL acc_event_destroy(right_buffers(v_ki)%trs_stackbuf%d%acc_ready) @@ -2235,7 +2235,7 @@ SUBROUTINE multiply_3D(imgdist_left, imgdist_right, & DEALLOCATE (left_buffers, right_buffers) DEALLOCATE (do_comm_left, do_comm_right) DEALLOCATE (right_vcol, left_vrow) - IF (has_acc) THEN + IF (use_acc()) THEN DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes) DEALLOCATE (col_blk_sizes2enum, enum2col_blk_sizes) END IF @@ -2544,7 +2544,7 @@ SUBROUTINE buffer_init(buffer, data_type, & CALL dbcsr_data_init(buffer%data_before_resize) CALL dbcsr_data_new(buffer%data_before_resize, data_type, memory_type=data_memory_type) END IF - new_trs_stackbuf = PRESENT(trs_memory_type) .AND. has_acc + new_trs_stackbuf = PRESENT(trs_memory_type) .AND. use_acc() ! IF (buffer%is_valid) THEN ! Invalid buffers if data_type is different diff --git a/src/mm/dbcsr_mm_accdrv.F b/src/mm/dbcsr_mm_accdrv.F index 11e1bd87c54..5a4cc28f05b 100644 --- a/src/mm/dbcsr_mm_accdrv.F +++ b/src/mm/dbcsr_mm_accdrv.F @@ -79,7 +79,7 @@ MODULE dbcsr_mm_accdrv TYPE dbcsr_mm_accdrv_type PRIVATE TYPE(dbcsr_work_type), POINTER :: product_wm => Null() - TYPE(dbcsr_data_obj) :: c_buffer + TYPE(dbcsr_data_obj) :: c_buffer = dbcsr_data_obj() LOGICAL :: c_area_copy = .TRUE. LOGICAL :: keep_product_data = .TRUE. LOGICAL :: do_gpu_c_redux = .FALSE. @@ -100,18 +100,18 @@ MODULE dbcsr_mm_accdrv ! Therefore, the memory is allocated once and stored in global variables. TYPE stack_buffer_type - TYPE(acc_devmem_type) :: devmem + TYPE(acc_devmem_type) :: devmem = acc_devmem_type() INTEGER, DIMENSION(:, :), POINTER :: hostmem => Null() - TYPE(acc_event_type) :: ready - TYPE(acc_event_type) :: calculated - TYPE(acc_stream_type) :: stream + TYPE(acc_event_type) :: ready = acc_event_type() + TYPE(acc_event_type) :: calculated = acc_event_type() + TYPE(acc_stream_type) :: stream = acc_stream_type() END TYPE stack_buffer_type TYPE thread_private_type TYPE(stack_buffer_type), DIMENSION(:), POINTER :: stack_buffers => Null() - TYPE(dbcsr_memtype_type) :: memtype_cbuffer + TYPE(dbcsr_memtype_type) :: memtype_cbuffer = dbcsr_memtype_type() ! ensure that array-elements are on different cache lines - INTEGER(kind=int_4), DIMENSION(64) :: padding + INTEGER(kind=int_4), DIMENSION(64) :: padding = -1_int_4 END TYPE thread_private_type TYPE(thread_private_type), SAVE, DIMENSION(:), ALLOCATABLE, TARGET :: all_thread_privates @@ -432,14 +432,14 @@ END SUBROUTINE dbcsr_mm_accdrv_barrier SUBROUTINE dbcsr_mm_accdrv_process(this, left, right, params, stack_size, & !! Processes a given stack using accelerator - stack_descr, success) + stack_descr, success, generated_acc_untuned) TYPE(dbcsr_mm_accdrv_type), INTENT(INOUT) :: this TYPE(dbcsr_type), INTENT(IN) :: left, right INTEGER, INTENT(IN) :: stack_size INTEGER, DIMENSION(dbcsr_ps_width, stack_size), & INTENT(INOUT) :: params TYPE(stack_descriptor_type), INTENT(IN) :: stack_descr - LOGICAL, INTENT(OUT) :: success + LOGICAL, INTENT(OUT) :: success, generated_acc_untuned CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_accdrv_process' @@ -525,7 +525,8 @@ SUBROUTINE dbcsr_mm_accdrv_process(this, left, right, params, stack_size, & def_mnk=stack_descr%defined_mnk, & stack_stream=stackbuf%stream, & c_stream=c_area%memory_type%acc_stream, & - success=success) + success=success, & + generated_acc_untuned=generated_acc_untuned) IF (success) THEN CALL acc_event_record(stackbuf%calculated, stream=stackbuf%stream) diff --git a/src/mm/dbcsr_mm_cannon.F b/src/mm/dbcsr_mm_cannon.F index fffd7f5d109..53b1f7faf7c 100644 --- a/src/mm/dbcsr_mm_cannon.F +++ b/src/mm/dbcsr_mm_cannon.F @@ -32,7 +32,7 @@ MODULE dbcsr_mm_cannon dbcsr_block_transpose_aa, & dbcsr_block_transpose USE dbcsr_config, ONLY: dbcsr_cfg, & - has_acc + use_acc USE dbcsr_data_methods, ONLY: & dbcsr_data_clear_pointer, dbcsr_data_ensure_size, dbcsr_data_get_size, & dbcsr_data_get_size_referenced, dbcsr_data_hold, dbcsr_data_host2dev, dbcsr_data_init, & @@ -1172,7 +1172,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & !! ! Evaluate sizes for workspaces IF (.NOT. keep_sparsity) THEN - IF (has_acc) THEN + IF (use_acc()) THEN size_guess_init = product_matrix_size_guess(left_set%mats(1, 1), right_set%mats(1, 1), product_matrix, & left_max_nze, right_max_nze, & left_col_nimages, right_row_nimages, & @@ -1214,7 +1214,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, & capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1) - IF (has_acc) THEN + IF (use_acc()) THEN ! enumerate the blocksizes to keep the following 2D-arrays small. CALL enumerate_blk_sizes(right_set%mats(1, 1)%row_blk_size%low%data, & dbcsr_max_row_size(right_set%mats(1, 1)), & @@ -1319,7 +1319,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & CALL dbcsr_data_new(right_data_rp, data_type) ! Setup transpose stackbuffers - IF (has_acc) THEN + IF (use_acc()) THEN CALL dbcsr_data_init(trs_stackbuf_1) CALL dbcsr_data_init(trs_stackbuf_2) CALL dbcsr_data_new(trs_stackbuf_1, data_type=dbcsr_type_int_4, & @@ -1422,7 +1422,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & vprow_shift=metronome + right_row_nimages, & shifting='R') ! - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_right", handle3) CALL acc_event_synchronize(right_buffer_comm%mats(v_ki + 1, 1)%data_area%d%acc_ready) CALL timestop(handle3) @@ -1545,7 +1545,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & vpcol_shift=metronome + left_col_nimages, & shifting='L') ! - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_left", handle3) CALL acc_event_synchronize(left_buffer_comm%mats(1, v_ki + 1)%data_area%d%acc_ready) CALL timestop(handle3) @@ -1617,7 +1617,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & array_data(right_buffer_calc%mats(v_ki_right, 1)%local_rows), & k_sizes) ! - IF (has_acc) THEN + IF (use_acc()) THEN CALL dbcsr_data_host2dev(left_buffer_calc%mats(1, v_ki_left)%data_area) CALL dbcsr_data_host2dev(right_buffer_calc%mats(v_ki_right, 1)%data_area) CALL acc_transpose_blocks(right_buffer_calc%mats(v_ki_right, 1), trs_stackbuf_calc, & @@ -1637,7 +1637,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & END IF ! Wait for left and right buffers transfer to device before proceeding - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_sync_h2d", handle2) CALL acc_device_synchronize() CALL timestop(handle2) @@ -1716,7 +1716,7 @@ SUBROUTINE multiply_cannon(left_set, right_set, product_matrix, & CALL m_memory(mem) max_memory = MAX(max_memory, REAL(mem)) - IF (has_acc) THEN + IF (use_acc()) THEN CALL dbcsr_data_release(trs_stackbuf_1) CALL dbcsr_data_release(trs_stackbuf_2) DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes) @@ -2121,7 +2121,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & !! ! Evaluate sizes for workspaces IF (.NOT. keep_sparsity) THEN - IF (has_acc) THEN + IF (use_acc()) THEN size_guess_init = product_matrix_size_guess(left_set%mats(1, 1), right_set%mats(1, 1), product_matrix, & left_max_nze, right_max_nze, & left_col_nimages, right_row_nimages, & @@ -2163,7 +2163,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & IF (ASSOCIATED(memtype_abpanel_2%pool)) & CALL dbcsr_mempool_limit_capacity(memtype_abpanel_2%pool, & capacity=left_row_mult*left_col_nimages + right_row_nimages*right_col_mult + 1) - IF (has_acc) THEN + IF (use_acc()) THEN ! enumerate the blocksizes to keep the following 2D-arrays small. CALL enumerate_blk_sizes(right_set%mats(1, 1)%row_blk_size%low%data, & dbcsr_max_row_size(right_set%mats(1, 1)), & @@ -2226,7 +2226,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & IF (stat .NE. 0) otf_filtering = .FALSE. END IF - IF (has_acc .and. otf_filtering) THEN + IF (use_acc() .and. otf_filtering) THEN max_nblks = MAX(left_max_nblks, right_max_nblks) CALL dbcsr_data_init(normsbuf) CALL dbcsr_data_new(normsbuf, data_type=dbcsr_type_real_4, & @@ -2295,7 +2295,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & CALL dbcsr_data_new(right_data_rp, data_type) ! Setup transpose stackbuffers - IF (has_acc) THEN + IF (use_acc()) THEN CALL dbcsr_data_init(trs_stackbuf_1) CALL dbcsr_data_init(trs_stackbuf_2) CALL dbcsr_data_new(trs_stackbuf_1, data_type=dbcsr_type_int_4, & @@ -2389,7 +2389,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & k_sizes) ! ! Transfer left and right buffers from host to GPU memory - IF (has_acc) THEN + IF (use_acc()) THEN IF (copy_left) THEN ! copy left buffer images to device DO v_ki = 1, left_col_nimages @@ -2493,7 +2493,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & vprow_shift=metronome + right_row_nimages, & shifting='R') ! - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_right", handle3) CALL acc_event_synchronize(right_buffer_comm%mats(v_ki + 1, 1)%data_area%d%acc_ready) CALL timestop(handle3) @@ -2522,7 +2522,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & END IF ! CALL timeset(routineN//"_metrocomm2", handle2) - IF (.not. has_acc) THEN + IF (.not. use_acc()) THEN CALL dbcsr_irecv_any(right_data_rp, right_recv_p, & grp, right_data_rr(v_ki + 1), tag=right_src_vrow) ELSE @@ -2538,7 +2538,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & END IF CALL mp_irecv(right_index_rp, right_recv_p, & grp, right_index_rr(v_ki + 1), tag=right_src_vrow) - IF (.not. has_acc) THEN + IF (.not. use_acc()) THEN CALL dbcsr_isend_any(right_data_sp, right_send_p, & grp, right_data_sr(v_ki + 1), tag=right_dst_vrow) ELSE @@ -2620,7 +2620,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & vpcol_shift=metronome + left_col_nimages, & shifting='L') ! - IF (has_acc) THEN + IF (use_acc()) THEN CALL timeset(routineN//"_acc_sync_left", handle3) CALL acc_event_synchronize(left_buffer_comm%mats(1, v_ki + 1)%data_area%d%acc_ready) CALL timestop(handle3) @@ -2649,7 +2649,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & END IF ! CALL timeset(routineN//"_metrocomm4", handle2) - IF (.not. has_acc) THEN + IF (.not. use_acc()) THEN CALL dbcsr_irecv_any(left_data_rp, left_recv_p, & grp, left_data_rr(v_ki + 1), tag=left_src_vcol) ELSE @@ -2665,7 +2665,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & END IF CALL mp_irecv(left_index_rp, left_recv_p, & grp, left_index_rr(v_ki + 1), tag=left_src_vcol) - IF (.not. has_acc) THEN + IF (.not. use_acc()) THEN CALL dbcsr_isend_any(left_data_sp, left_send_p, & grp, left_data_sr(v_ki + 1), tag=left_dst_vcol) ELSE @@ -2693,7 +2693,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & ! Do multiplication ! If no GPU backend, calculate norms on the CPU - IF (otf_filtering .and. .not. has_acc) THEN + IF (otf_filtering .and. .not. use_acc()) THEN left_norms(:) = huge_norm right_norms(:) = huge_norm CALL calculate_norms(right_buffer_calc%mats(v_ki_right, 1), & @@ -2776,7 +2776,7 @@ SUBROUTINE multiply_cannon_g2g(left_set, right_set, product_matrix, & CALL m_memory(mem) max_memory = MAX(max_memory, REAL(mem)) - IF (has_acc) THEN + IF (use_acc()) THEN CALL dbcsr_data_release(trs_stackbuf_1) CALL dbcsr_data_release(trs_stackbuf_2) DEALLOCATE (row_blk_sizes2enum, enum2row_blk_sizes) diff --git a/src/mm/dbcsr_mm_common.F b/src/mm/dbcsr_mm_common.F index af586472eb7..d6609e8fc3a 100644 --- a/src/mm/dbcsr_mm_common.F +++ b/src/mm/dbcsr_mm_common.F @@ -62,7 +62,7 @@ MODULE dbcsr_mm_common TYPE dbcsr_memtype_type_p TYPE(dbcsr_memtype_type), POINTER :: p => Null() ! ensure that array-elements are on different cache lines - INTEGER(kind=int_4), DIMENSION(64) :: padding + INTEGER(kind=int_4), DIMENSION(64) :: padding = -1_int_4 END TYPE dbcsr_memtype_type_p TYPE(dbcsr_memtype_type_p), DIMENSION(:), POINTER, SAVE :: memtype_product_wm => Null() diff --git a/src/mm/dbcsr_mm_csr.F b/src/mm/dbcsr_mm_csr.F index 217b37b907b..0cf05b0a7e3 100644 --- a/src/mm/dbcsr_mm_csr.F +++ b/src/mm/dbcsr_mm_csr.F @@ -62,21 +62,21 @@ MODULE dbcsr_mm_csr TYPE dbcsr_mm_csr_type PRIVATE TYPE(hash_table_type), DIMENSION(:), POINTER :: c_hashes => Null() - INTEGER :: nm_stacks, nn_stacks, nk_stacks + INTEGER :: nm_stacks = -1, nn_stacks = -1, nk_stacks = -1 INTEGER(KIND=int_4), DIMENSION(:), POINTER :: m_size_maps => Null() INTEGER(KIND=int_4), DIMENSION(:), POINTER :: n_size_maps => Null() INTEGER(KIND=int_4), DIMENSION(:), POINTER :: k_size_maps => Null() - INTEGER :: max_m, max_n, max_k - INTEGER :: m_size_maps_size, & - n_size_maps_size, & - k_size_maps_size + INTEGER :: max_m = -1, max_n = -1, max_k = -1 + INTEGER :: m_size_maps_size = -1, & + n_size_maps_size = -1, & + k_size_maps_size = -1 INTEGER(KIND=int_1), DIMENSION(:, :, :), POINTER :: stack_map => Null() TYPE(stack_descriptor_type), DIMENSION(:), POINTER :: stacks_descr => Null() TYPE(dbcsr_work_type), POINTER :: product_wm => Null() INTEGER, DIMENSION(:, :, :), POINTER :: stacks_data => Null() INTEGER, DIMENSION(:), POINTER :: stacks_fillcount => Null() - TYPE(dbcsr_mm_sched_type) :: sched - LOGICAL :: keep_product_data + TYPE(dbcsr_mm_sched_type) :: sched = dbcsr_mm_sched_type() + LOGICAL :: keep_product_data = .FALSE. END TYPE dbcsr_mm_csr_type #include "utils/dbcsr_hash_table_types.f90" diff --git a/src/mm/dbcsr_mm_hostdrv.F b/src/mm/dbcsr_mm_hostdrv.F index f3d76a85695..fa33c90021a 100644 --- a/src/mm/dbcsr_mm_hostdrv.F +++ b/src/mm/dbcsr_mm_hostdrv.F @@ -10,7 +10,7 @@ MODULE dbcsr_mm_hostdrv !! Stacks of small matrix multiplications USE dbcsr_config, ONLY: dbcsr_cfg, & - has_acc, & + use_acc, & mm_driver_blas, & mm_driver_matmul, & mm_driver_smm, & @@ -57,7 +57,7 @@ MODULE dbcsr_mm_hostdrv LOGICAL, PARAMETER :: careful_mod = .FALSE. TYPE dbcsr_mm_hostdrv_type - TYPE(dbcsr_data_obj) :: data_area + TYPE(dbcsr_data_obj) :: data_area = dbcsr_data_obj() END TYPE dbcsr_mm_hostdrv_type CONTAINS @@ -103,12 +103,12 @@ SUBROUTINE dbcsr_mm_hostdrv_process(this, left, right, params, stack_size, & LOGICAL, INTENT(OUT) :: success, used_smm CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_mm_hostdrv_process' - LOGICAL, PARAMETER :: careful = careful_mod, dbg = .FALSE. + LOGICAL, PARAMETER :: careful = careful_mod, dbg = debug_mod INTEGER :: error_handle, sp REAL(KIND=dp) :: rnd - IF (has_acc) & !for cpu-only runs this is called too often + IF (use_acc()) & !for cpu-only runs this is called too often CALL timeset(routineN, error_handle) success = .TRUE. !host driver never fails...hopefully @@ -236,7 +236,7 @@ SUBROUTINE dbcsr_mm_hostdrv_process(this, left, right, params, stack_size, & DBCSR_ABORT("Invalid multiplication driver") END SELECT - IF (has_acc) & !for cpu-only runs this is called too often + IF (use_acc()) & !for cpu-only runs this is called too often CALL timestop(error_handle) END SUBROUTINE dbcsr_mm_hostdrv_process diff --git a/src/mm/dbcsr_mm_multrec.F b/src/mm/dbcsr_mm_multrec.F index d8d0420f782..161b0b69f6a 100644 --- a/src/mm/dbcsr_mm_multrec.F +++ b/src/mm/dbcsr_mm_multrec.F @@ -57,34 +57,34 @@ MODULE dbcsr_mm_multrec !! its own private copy. PRIVATE - LOGICAL :: c_has_symmetry, keep_sparsity, keep_product_data, use_eps + LOGICAL :: c_has_symmetry = .FALSE., keep_sparsity = .FALSE., keep_product_data = .FALSE., use_eps = .FALSE. !! The product matrix has symmetry !! Sparsity of C matrix should be kept !! Use on-the-fly filtering - INTEGER, DIMENSION(:), POINTER :: m_sizes, n_sizes, k_sizes + INTEGER, DIMENSION(:), POINTER :: m_sizes => NULL(), n_sizes => NULL(), k_sizes => NULL() !! Block sizes of A and C matrix rows, indexed locally !! Block sizes of B and C matrix columns, indexed locally !! Block sizes of A matrix columns and B matrix rows, indexed locally - INTEGER, DIMENSION(:), POINTER :: m_global_sizes, n_global_sizes - INTEGER, DIMENSION(:), POINTER :: c_local_rows, c_local_cols, k_locals, & - c_global_rows, c_global_cols + INTEGER, DIMENSION(:), POINTER :: m_global_sizes => NULL(), n_global_sizes => NULL() + INTEGER, DIMENSION(:), POINTER :: c_local_rows => NULL(), c_local_cols => NULL(), k_locals => NULL(), & + c_global_rows => NULL(), c_global_cols => NULL() !! C and A matrix local rows. Map from local row (index) to global row (value). !! C and B matrix local columns. Map from local column (index) to global column (value). !! A matrix local columns and B matrix local rows. Map from local row/column (index) to global row/column (value). !! C and A matrix global rows. Map from global rows (index) to local rows (value). !! C and B matrix global columns. Map from global columns (index) to local columns (value). - REAL(KIND=sp), DIMENSION(:), POINTER :: row_max_epss, a_norms, b_norms + REAL(KIND=sp), DIMENSION(:), POINTER :: row_max_epss => NULL(), a_norms => NULL(), b_norms => NULL() !! Maximum eps to be used for one row. !! Norms of A matrix blocks. !! Norms of B matrix blocks. - REAL(KIND=real_8) :: eps - INTEGER :: original_lastblk + REAL(KIND=real_8) :: eps = -1.0_real_8 + INTEGER :: original_lastblk = -1 !! Number of work matrix blocks before addition - INTEGER(kind=int_8) :: flop + INTEGER(kind=int_8) :: flop = -1_int_8 !! flop count TYPE(dbcsr_work_type), POINTER :: product_wm => Null() - TYPE(dbcsr_mm_csr_type) :: csr + TYPE(dbcsr_mm_csr_type) :: csr = dbcsr_mm_csr_type() LOGICAL :: new_row_max_epss = .FALSE. LOGICAL :: initialized = .FALSE. END TYPE dbcsr_mm_multrec_type diff --git a/src/mm/dbcsr_mm_sched.F b/src/mm/dbcsr_mm_sched.F index 27c3e350b67..db68526e398 100644 --- a/src/mm/dbcsr_mm_sched.F +++ b/src/mm/dbcsr_mm_sched.F @@ -20,7 +20,7 @@ MODULE dbcsr_mm_sched USE dbcsr_block_operations, ONLY: dbcsr_data_clear USE dbcsr_config, ONLY: dbcsr_cfg, & default_resize_factor, & - has_acc + use_acc USE dbcsr_data_methods, ONLY: dbcsr_data_ensure_size, & dbcsr_data_get_size USE dbcsr_kinds, ONLY: int_4, int_8, real_8 @@ -71,8 +71,8 @@ MODULE dbcsr_mm_sched TYPE dbcsr_mm_sched_type PRIVATE TYPE(dbcsr_work_type), POINTER :: product_wm => Null() - TYPE(dbcsr_mm_accdrv_type) :: accdrv - TYPE(dbcsr_mm_hostdrv_type) :: hostdrv + TYPE(dbcsr_mm_accdrv_type) :: accdrv = dbcsr_mm_accdrv_type() + TYPE(dbcsr_mm_hostdrv_type) :: hostdrv = dbcsr_mm_hostdrv_type() LOGICAL :: avoid_accdrv = .FALSE. LOGICAL :: product_wm_cleared = .FALSE. LOGICAL :: keep_product_data = .TRUE. @@ -92,7 +92,7 @@ MODULE dbcsr_mm_sched INTEGER(kind=int_8) :: max_acc_flop = 0 INTEGER(kind=int_8), DIMENSION(:, :), ALLOCATABLE :: num_mnk_stacks ! ensure that array-elements are on different cache lines - INTEGER(kind=int_4), DIMENSION(64) :: padding + INTEGER(kind=int_4), DIMENSION(64) :: padding = -1_int_4 END TYPE stats_type TYPE(stats_type), DIMENSION(:), ALLOCATABLE, TARGET, SAVE :: stats_per_thread @@ -104,7 +104,7 @@ SUBROUTINE stats_init(stats) !! Initialize a stats_type TYPE(stats_type), INTENT(INOUT) :: stats - ALLOCATE (stats%num_mnk_stacks(1, 9)) + ALLOCATE (stats%num_mnk_stacks(1, 10)) stats%num_mnk_stacks(1, :) = 0 ! entry for the default stack END SUBROUTINE stats_init @@ -194,7 +194,7 @@ SUBROUTINE dbcsr_mm_sched_init(this, product_wm, nlayers, keep_product_data) CALL dbcsr_mm_hostdrv_init(this%hostdrv, product_wm) - IF (has_acc) & + IF (use_acc()) & CALL dbcsr_mm_accdrv_init(this%accdrv, product_wm, nlayers, keep_product_data) CALL timestop(handle) @@ -215,7 +215,7 @@ SUBROUTINE dbcsr_mm_sched_finalize(this) CALL ensure_product_wm_cleared(this) !CALL dbcsr_mm_hostdrv_finalize(this%hostdrv) ! not needed - IF (has_acc) & + IF (use_acc()) & CALL dbcsr_mm_accdrv_finalize(this%accdrv) CALL timestop(handle) @@ -232,7 +232,7 @@ SUBROUTINE dbcsr_mm_sched_dev2host_init(this) CALL timeset(routineN, handle) - IF (has_acc) & + IF (use_acc()) & CALL dbcsr_mm_accdrv_dev2host_init(this%accdrv) CALL timestop(handle) @@ -258,7 +258,7 @@ SUBROUTINE dbcsr_mm_sched_barrier() !CALL dbcsr_mm_hostdrv_barrier(this%hostdrv) ! not needed - IF (has_acc) & + IF (use_acc()) & CALL dbcsr_mm_accdrv_barrier() END SUBROUTINE dbcsr_mm_sched_barrier @@ -274,7 +274,7 @@ SUBROUTINE dbcsr_mm_sched_process(this, left, right, stack_data, & INTEGER :: ithread, sp, stacked_datasize INTEGER(kind=int_8) :: flop_per_entry, total_flop - LOGICAL :: success, used_smm + LOGICAL :: success, generated_acc_untuned, used_smm TYPE(stats_type), POINTER :: mystats IF (stack_fillcount <= 0) & @@ -324,7 +324,7 @@ SUBROUTINE dbcsr_mm_sched_process(this, left, right, stack_data, & flop_per_entry = INT(2, KIND=int_8)*stack_descr%max_m*stack_descr%max_n*stack_descr%max_k total_flop = stack_fillcount*flop_per_entry - IF (has_acc .AND. & + IF (use_acc() .AND. & flop_per_entry > dbcsr_cfg%accdrv_min_flop_process%val .AND. & (.NOT. this%avoid_accdrv) .AND. & (stack_descr%defined_mnk .OR. dbcsr_cfg%accdrv_do_inhomogenous%val)) THEN @@ -334,7 +334,8 @@ SUBROUTINE dbcsr_mm_sched_process(this, left, right, stack_data, & params=stack_data, & stack_size=stack_fillcount, & stack_descr=stack_descr, & - success=success) + success=success, & + generated_acc_untuned=generated_acc_untuned) IF (success) THEN ! update statistics @@ -342,7 +343,8 @@ SUBROUTINE dbcsr_mm_sched_process(this, left, right, stack_data, & mystats%acc_flop = mystats%acc_flop + total_flop CALL stats_add(mystats, & m=stack_descr%m, n=stack_descr%n, k=stack_descr%k, & - stacksize_acc=INT(stack_fillcount, kind=int_8)) + stacksize_acc=INT(stack_fillcount, kind=int_8), & + generated_acc_untuned=generated_acc_untuned) RETURN ELSE this%avoid_accdrv = dbcsr_cfg%accdrv_avoid_after_busy%val @@ -388,7 +390,7 @@ SUBROUTINE dbcsr_mm_sched_set_orig_datasize(this, newsize) END SUBROUTINE dbcsr_mm_sched_set_orig_datasize SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc, & - nstacks_cpu, nstacks_smm, nstacks_acc) + nstacks_cpu, nstacks_smm, nstacks_acc, generated_acc_untuned) !! Helper-routine used by dbcsr_mm_sched_process to supply statistics. TYPE(stats_type), INTENT(INOUT) :: stats @@ -396,11 +398,13 @@ SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc INTEGER(kind=int_8), OPTIONAL :: stacksize_cpu, stacksize_smm, & stacksize_acc, nstacks_cpu, & nstacks_smm, nstacks_acc + LOGICAL, OPTIONAL :: generated_acc_untuned INTEGER :: i, s INTEGER(kind=int_8) :: my_nstacks_acc, my_nstacks_cpu, & my_nstacks_smm, my_stacksize_acc, & - my_stacksize_cpu, my_stacksize_smm + my_stacksize_cpu, my_stacksize_smm, & + my_nstacks_acc_default INTEGER(kind=int_8), ALLOCATABLE, DIMENSION(:, :) :: tmp my_stacksize_cpu = 0 @@ -413,9 +417,13 @@ SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc my_nstacks_cpu = MERGE(1, 0, my_stacksize_cpu > 0) my_nstacks_smm = MERGE(1, 0, my_stacksize_smm > 0) my_nstacks_acc = MERGE(1, 0, my_stacksize_acc > 0) + my_nstacks_acc_default = 0 IF (PRESENT(nstacks_cpu)) my_nstacks_cpu = nstacks_cpu IF (PRESENT(nstacks_smm)) my_nstacks_smm = nstacks_smm IF (PRESENT(nstacks_acc)) my_nstacks_acc = nstacks_acc + IF (PRESENT(generated_acc_untuned)) THEN + IF (generated_acc_untuned) my_nstacks_acc_default = 1 + END IF DO i = 1, SIZE(stats%num_mnk_stacks, 1) IF (stats%num_mnk_stacks(i, 1) == m .AND. & @@ -427,16 +435,17 @@ SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc stats%num_mnk_stacks(i, 7) = stats%num_mnk_stacks(i, 7) + my_nstacks_cpu stats%num_mnk_stacks(i, 8) = stats%num_mnk_stacks(i, 8) + my_nstacks_smm stats%num_mnk_stacks(i, 9) = stats%num_mnk_stacks(i, 9) + my_nstacks_acc + stats%num_mnk_stacks(i, 10) = stats%num_mnk_stacks(i, 10) + my_nstacks_acc_default RETURN END IF END DO !not found, ok lets grow the list s = SIZE(stats%num_mnk_stacks, 1) - ALLOCATE (tmp(s, 9)) + ALLOCATE (tmp(s, 10)) tmp(:, :) = stats%num_mnk_stacks(:, :) DEALLOCATE (stats%num_mnk_stacks) - ALLOCATE (stats%num_mnk_stacks(s + 1, 9)) + ALLOCATE (stats%num_mnk_stacks(s + 1, 10)) stats%num_mnk_stacks(1:s, :) = tmp(:, :) stats%num_mnk_stacks(s + 1, 1) = m stats%num_mnk_stacks(s + 1, 2) = n @@ -447,6 +456,7 @@ SUBROUTINE stats_add(stats, m, n, k, stacksize_cpu, stacksize_smm, stacksize_acc stats%num_mnk_stacks(s + 1, 7) = my_nstacks_cpu stats%num_mnk_stacks(s + 1, 8) = my_nstacks_smm stats%num_mnk_stacks(s + 1, 9) = my_nstacks_acc + stats%num_mnk_stacks(s + 1, 10) = my_nstacks_acc_default DEALLOCATE (tmp) END SUBROUTINE stats_add @@ -483,7 +493,8 @@ SUBROUTINE stats_collect_from_threads(report) stacksize_acc=istats%num_mnk_stacks(j, 6), & nstacks_cpu=istats%num_mnk_stacks(j, 7), & nstacks_smm=istats%num_mnk_stacks(j, 8), & - nstacks_acc=istats%num_mnk_stacks(j, 9)) + nstacks_acc=istats%num_mnk_stacks(j, 9), & + generated_acc_untuned=istats%num_mnk_stacks(j, 10) .GT. 0) END DO END DO @@ -538,7 +549,7 @@ SUBROUTINE stats_collect_from_ranks(report, group) DO i = 1, SIZE(report%num_mnk_stacks, 1) IF (ALL(report%num_mnk_stacks(i, 1:3) == mnk)) THEN IF (i <= SIZE(mnk_collected)) mnk_collected(i) = 1 - CALL mp_sum(report%num_mnk_stacks(i, 4:9), group) + CALL mp_sum(report%num_mnk_stacks(i, 4:10), group) END IF END DO END DO @@ -555,6 +566,9 @@ SUBROUTINE stats_print_report(report, output_unit) INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:) :: sort_key INTEGER(KIND=int_8), DIMENSION(3) :: flops_homo INTEGER, ALLOCATABLE, DIMENSION(:) :: sort_idx + CHARACTER(LEN=4) :: generated_acc_untuned_label + LOGICAL :: has_acc_untuned_kernel, & + use_cpu_kernels IF (output_unit <= 0) RETURN @@ -568,18 +582,43 @@ SUBROUTINE stats_print_report(report, output_unit) total_flops_homo = 0 flops_homo(:) = 0 + has_acc_untuned_kernel = .FALSE. + use_cpu_kernels = .FALSE. + DO i = 1, SIZE(sort_idx) j = sort_idx(i) + 1 total = SUM(report%num_mnk_stacks(j, 4:6)) flops = 2*total*PRODUCT(report%num_mnk_stacks(j, 1:3)) total_flops_homo = total_flops_homo + flops flops_homo(:) = flops_homo(:) + 2*report%num_mnk_stacks(j, 4:6)*PRODUCT(report%num_mnk_stacks(j, 1:3)) - WRITE (output_unit, "(A,I5,' x ',I5,' x ',I5,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & + IF (report%num_mnk_stacks(j, 10) .EQ. 0) THEN + generated_acc_untuned_label = "" + ELSE + generated_acc_untuned_label = "(*)" + has_acc_untuned_kernel = .TRUE. + END IF + + IF (SUM(report%num_mnk_stacks(j, 4:5)) .GT. 0) THEN + use_cpu_kernels = .TRUE. + END IF + + WRITE (output_unit, "(A,I5,' x ',I5,' x ',I5,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'% ',A)") & " flops ", report%num_mnk_stacks(j, 1:3), & flops, & - 100*REAL(report%num_mnk_stacks(j, 4:6))/REAL(MAX(INT(1, KIND=int_8), total)) + 100*REAL(report%num_mnk_stacks(j, 4:6))/REAL(MAX(INT(1, KIND=int_8), total)), & + generated_acc_untuned_label END DO + IF (has_acc_untuned_kernel) THEN + CALL dbcsr_warn(__LOCATION__, & + " (*) ACC Untuned kernels, consider to run the ACC tuning procedure for them") + END IF + + IF (use_cpu_kernels .AND. use_acc()) THEN + CALL dbcsr_warn(__LOCATION__, & + " Some kernels are running on the CPU, consider to run the ACC tuning procedure for them") + END IF + total = report%cpu_flop + report%smm_flop + report%acc_flop WRITE (output_unit, "(A,T30,I20,5X,F5.1,'%',4X,F5.1,'%',4X,F5.1,'%')") & " flops inhomo. stacks", total - total_flops_homo, & diff --git a/src/mm/dbcsr_mm_types.F b/src/mm/dbcsr_mm_types.F index f172903d4ce..fd2c9f38836 100644 --- a/src/mm/dbcsr_mm_types.F +++ b/src/mm/dbcsr_mm_types.F @@ -32,8 +32,8 @@ MODULE dbcsr_mm_types INTEGER, PARAMETER, PUBLIC :: p_c_blk = 7 TYPE stack_descriptor_type - INTEGER :: m, n, k, max_m, max_n, max_k - LOGICAL :: defined_mnk + INTEGER :: m = -1, n = -1, k = -1, max_m = -1, max_n = -1, max_k = -1 + LOGICAL :: defined_mnk = .FALSE. END TYPE stack_descriptor_type END MODULE dbcsr_mm_types diff --git a/src/mpi/dbcsr_mpiwrap.F b/src/mpi/dbcsr_mpiwrap.F index 2be26351bc8..f5393630eb9 100644 --- a/src/mpi/dbcsr_mpiwrap.F +++ b/src/mpi/dbcsr_mpiwrap.F @@ -110,6 +110,7 @@ MODULE dbcsr_mpiwrap MPI_WIN_TYPE, PARAMETER :: mp_win_null_handle = MPI_WIN_NULL MPI_FILE_TYPE, PARAMETER :: mp_file_null_handle = MPI_FILE_NULL MPI_INFO_TYPE, PARAMETER :: mp_info_null_handle = MPI_INFO_NULL + MPI_DATA_TYPE, PARAMETER :: mp_datatype_null_handle = MPI_DATATYPE_NULL INTEGER, PARAMETER, PUBLIC :: mp_status_size = MPI_STATUS_SIZE INTEGER, PARAMETER, PUBLIC :: mp_proc_null = MPI_PROC_NULL ! Set max allocatable memory by MPI to 2 GiByte @@ -136,6 +137,7 @@ MODULE dbcsr_mpiwrap MPI_WIN_TYPE, PARAMETER :: mp_win_null_handle = -5 MPI_FILE_TYPE, PARAMETER :: mp_file_null_handle = -6 MPI_INFO_TYPE, PARAMETER :: mp_info_null_handle = -7 + MPI_DATA_TYPE, PARAMETER :: mp_datatype_null_handle = -13 INTEGER, PARAMETER, PUBLIC :: mp_status_size = -7 INTEGER, PARAMETER, PUBLIC :: mp_proc_null = -8 INTEGER, PARAMETER, PUBLIC :: mp_max_library_version_string = 1 @@ -467,39 +469,39 @@ MODULE dbcsr_mpiwrap ! Type declarations TYPE mp_indexing_meta_type - INTEGER, DIMENSION(:), POINTER :: index, chunks + INTEGER, DIMENSION(:), POINTER :: index => NULL(), chunks => NULL() END TYPE mp_indexing_meta_type TYPE mp_type_descriptor_type - MPI_DATA_TYPE :: type_handle - INTEGER :: length -#if defined(__parallel) - INTEGER(kind=mpi_address_kind) :: base -#endif - INTEGER(kind=int_4), DIMENSION(:), POINTER :: data_i - INTEGER(kind=int_8), DIMENSION(:), POINTER :: data_l - REAL(kind=real_4), DIMENSION(:), POINTER :: data_r - REAL(kind=real_8), DIMENSION(:), POINTER :: data_d - COMPLEX(kind=real_4), DIMENSION(:), POINTER :: data_c - COMPLEX(kind=real_8), DIMENSION(:), POINTER :: data_z - TYPE(mp_type_descriptor_type), DIMENSION(:), POINTER :: subtype - INTEGER :: vector_descriptor(2) - LOGICAL :: has_indexing - TYPE(mp_indexing_meta_type) :: index_descriptor + MPI_DATA_TYPE :: type_handle = mp_datatype_null_handle + INTEGER :: length = -1 +#if defined(__parallel) + INTEGER(kind=mpi_address_kind) :: base = -1_mpi_address_kind +#endif + INTEGER(kind=int_4), DIMENSION(:), POINTER :: data_i => NULL() + INTEGER(kind=int_8), DIMENSION(:), POINTER :: data_l => NULL() + REAL(kind=real_4), DIMENSION(:), POINTER :: data_r => NULL() + REAL(kind=real_8), DIMENSION(:), POINTER :: data_d => NULL() + COMPLEX(kind=real_4), DIMENSION(:), POINTER :: data_c => NULL() + COMPLEX(kind=real_8), DIMENSION(:), POINTER :: data_z => NULL() + TYPE(mp_type_descriptor_type), DIMENSION(:), POINTER :: subtype => NULL() + INTEGER :: vector_descriptor(2) = -1 + LOGICAL :: has_indexing = .FALSE. + TYPE(mp_indexing_meta_type) :: index_descriptor = mp_indexing_meta_type() END TYPE mp_type_descriptor_type TYPE mp_file_indexing_meta_type - INTEGER, DIMENSION(:), POINTER :: index + INTEGER, DIMENSION(:), POINTER :: index => NULL() INTEGER(kind=address_kind), & - DIMENSION(:), POINTER :: chunks + DIMENSION(:), POINTER :: chunks => NULL() END TYPE mp_file_indexing_meta_type ! type internally used to store message passing performance indicators ! ************************************************************************************************** TYPE mp_perf_type - CHARACTER(LEN=20) :: name - INTEGER :: count - REAL(KIND=dp) :: msg_size + CHARACTER(LEN=20) :: name = "" + INTEGER :: count = -1 + REAL(KIND=dp) :: msg_size = -1.0_dp END TYPE mp_perf_type INTEGER, PARAMETER :: MAX_PERF = 28 @@ -507,8 +509,8 @@ MODULE dbcsr_mpiwrap ! ************************************************************************************************** TYPE mp_perf_env_type !private - INTEGER :: ref_count, id_nr - TYPE(mp_perf_type), DIMENSION(MAX_PERF) :: mp_perfs + INTEGER :: ref_count = -1, id_nr = -1 + TYPE(mp_perf_type), DIMENSION(MAX_PERF) :: mp_perfs = mp_perf_type() END TYPE mp_perf_env_type ! ************************************************************************************************** diff --git a/src/ops/dbcsr_csr_conversions.F b/src/ops/dbcsr_csr_conversions.F index 6251aca65eb..8aecc507014 100644 --- a/src/ops/dbcsr_csr_conversions.F +++ b/src/ops/dbcsr_csr_conversions.F @@ -82,18 +82,18 @@ MODULE dbcsr_csr_conversions !! index of this value is not in csr_to_brd_ind. !! same as csr_to_brd_ind but inverse mapping. If a given DBCSR index dbcsr_ind points to a zero element, then !! brd_to_csr_ind(dbcsr_ind) is -1. - TYPE(dbcsr_type) :: brd_mat + TYPE(dbcsr_type) :: brd_mat = dbcsr_type() !! DBCSR BRD matrix acting as an intermediate step in any conversion from and to DBCSR format. LOGICAL :: has_dbcsr_block_data = .FALSE. !! whether dbcsr_* fields are defined - INTEGER :: dbcsr_nblkcols_total, & - dbcsr_nblkrows_total, & - dbcsr_nblks_local + INTEGER :: dbcsr_nblkcols_total = -1, & + dbcsr_nblkrows_total = -1, & + dbcsr_nblks_local = -1 !! data from original DBCSR matrix (not block-row distributed), !! representing the original block structure. - INTEGER, DIMENSION(:), POINTER :: dbcsr_row_p, dbcsr_col_i, & - dbcsr_row_blk_size, dbcsr_col_blk_size + INTEGER, DIMENSION(:), POINTER :: dbcsr_row_p => NULL(), dbcsr_col_i => NULL(), & + dbcsr_row_blk_size => NULL(), dbcsr_col_blk_size => NULL() !! data from original DBCSR matrix (not block-row distributed), !! representing the original block structure. END TYPE @@ -115,24 +115,24 @@ MODULE dbcsr_csr_conversions TYPE csr_type !! Type for CSR matrices - INTEGER :: nrows_total, ncols_total, & - nze_local, nrows_local + INTEGER :: nrows_total = -1, ncols_total = -1, & + nze_local = -1, nrows_local = -1 !! total number of rows !! total number of columns !! local number of nonzero elements !! local number of rows - TYPE(mp_comm_type) :: mp_group + TYPE(mp_comm_type) :: mp_group = mp_comm_type() !! message-passing group ID - INTEGER(KIND=int_8) :: nze_total + INTEGER(KIND=int_8) :: nze_total = -1_int_8 !! total number of nonzero elements INTEGER, DIMENSION(:), POINTER :: rowptr_local => NULL(), & colind_local => NULL(), & nzerow_local => NULL() !! indices of elements inside nzval_local starting a row !! column indices of elements inside nzval_local - TYPE(csr_data_area_type) :: nzval_local + TYPE(csr_data_area_type) :: nzval_local = csr_data_area_type() !! values of local non-zero elements, row-wise ordering. - TYPE(csr_mapping_data) :: dbcsr_mapping + TYPE(csr_mapping_data) :: dbcsr_mapping = csr_mapping_data() !! mapping data relating indices of nzval_local to indices of a block-row distributed DBCSR matrix LOGICAL :: has_mapping = .FALSE. !! whether dbcsr_mapping is defined @@ -143,7 +143,7 @@ MODULE dbcsr_csr_conversions END TYPE csr_type TYPE csr_p_type - TYPE(csr_type), POINTER :: csr_mat + TYPE(csr_type), POINTER :: csr_mat => NULL() END TYPE csr_p_type PUBLIC :: csr_type, csr_p_type, convert_csr_to_dbcsr, & diff --git a/src/tas/dbcsr_tas_global.F b/src/tas/dbcsr_tas_global.F index 20c9f3ee349..8b53842e2e0 100644 --- a/src/tas/dbcsr_tas_global.F +++ b/src/tas/dbcsr_tas_global.F @@ -38,9 +38,9 @@ MODULE dbcsr_tas_global ! abstract type for distribution vectors along one dimension TYPE, ABSTRACT :: dbcsr_tas_distribution ! number of process rows / columns: - INTEGER :: nprowcol + INTEGER :: nprowcol = -1 ! number of matrix rows / columns: - INTEGER(KIND=int_8) :: nmrowcol + INTEGER(KIND=int_8) :: nmrowcol = -1_int_8 CONTAINS ! map matrix rows/cols to distribution rows/cols: PROCEDURE(rowcol_dist), deferred :: dist @@ -52,7 +52,7 @@ MODULE dbcsr_tas_global ! - may not be load balanced for arbitrary block sizes ! - memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_cyclic - INTEGER :: split_size + INTEGER :: split_size = -1 CONTAINS PROCEDURE :: dist => cyclic_dist PROCEDURE :: rowcols => cyclic_rowcols @@ -73,9 +73,9 @@ MODULE dbcsr_tas_global ! - memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_distribution) :: dbcsr_tas_dist_repl INTEGER, DIMENSION(:), ALLOCATABLE :: dist_vec - INTEGER :: nmrowcol_local - INTEGER :: n_repl - INTEGER :: dist_size + INTEGER :: nmrowcol_local = -1 + INTEGER :: n_repl = -1 + INTEGER :: dist_size = -1 CONTAINS PROCEDURE :: dist => repl_dist PROCEDURE :: rowcols => repl_rowcols @@ -84,9 +84,9 @@ MODULE dbcsr_tas_global ! abstract type for integer data (e.g. block sizes) along one dimension TYPE, ABSTRACT :: dbcsr_tas_rowcol_data ! number of matrix rows / columns (blocks): - INTEGER(KIND=int_8) :: nmrowcol + INTEGER(KIND=int_8) :: nmrowcol = -1_int_8 ! number of matrix rows / columns (elements): - INTEGER(KIND=int_8) :: nfullrowcol + INTEGER(KIND=int_8) :: nfullrowcol = -1_int_8 CONTAINS ! integer data for each block row / col PROCEDURE(rowcol_data), deferred :: DATA @@ -106,7 +106,7 @@ MODULE dbcsr_tas_global ! - memory efficient for large dimensions TYPE, EXTENDS(dbcsr_tas_rowcol_data) :: dbcsr_tas_blk_size_repl INTEGER, DIMENSION(:), ALLOCATABLE :: blk_size_vec - INTEGER :: nmrowcol_local + INTEGER :: nmrowcol_local = -1 CONTAINS PROCEDURE :: DATA => blk_size_repl END TYPE diff --git a/src/tas/dbcsr_tas_types.F b/src/tas/dbcsr_tas_types.F index 457d016c05c..a6b297525c1 100644 --- a/src/tas/dbcsr_tas_types.F +++ b/src/tas/dbcsr_tas_types.F @@ -35,14 +35,14 @@ MODULE dbcsr_tas_types ! info on MPI Cartesian grid that is split on MPI subgroups. ! info on distribution of matrix rows / columns to different subgroups. TYPE dbcsr_tas_split_info - TYPE(mp_comm_type) :: mp_comm ! global communicator - INTEGER, DIMENSION(2) :: pdims ! dimensions of process grid - INTEGER :: igroup ! which subgroup do I belong to - INTEGER :: ngroup ! how many groups in total - INTEGER :: split_rowcol ! split row or column? - INTEGER :: pgrid_split_size ! how many process rows/cols in subgroups - INTEGER :: group_size ! group size (how many cores) of subgroups - TYPE(mp_comm_type) :: mp_comm_group ! sub communicator + TYPE(mp_comm_type) :: mp_comm = mp_comm_type() ! global communicator + INTEGER, DIMENSION(2) :: pdims = -1 ! dimensions of process grid + INTEGER :: igroup = -1 ! which subgroup do I belong to + INTEGER :: ngroup = -1 ! how many groups in total + INTEGER :: split_rowcol = -1 ! split row or column? + INTEGER :: pgrid_split_size = -1 ! how many process rows/cols in subgroups + INTEGER :: group_size = -1 ! group size (how many cores) of subgroups + TYPE(mp_comm_type) :: mp_comm_group = mp_comm_type() ! sub communicator INTEGER, ALLOCATABLE :: ngroup_opt ! optimal number of groups (split factor) LOGICAL, DIMENSION(2) :: strict_split = [.FALSE., .FALSE.] ! if .true., split factor should not be modified (2 parameters for current and general settings) @@ -50,8 +50,8 @@ MODULE dbcsr_tas_types END TYPE TYPE dbcsr_tas_distribution_type - TYPE(dbcsr_tas_split_info) :: info - TYPE(dbcsr_distribution_obj) :: dbcsr_dist + TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info() + TYPE(dbcsr_distribution_obj) :: dbcsr_dist = dbcsr_distribution_obj() CLASS(dbcsr_tas_distribution), ALLOCATABLE :: row_dist CLASS(dbcsr_tas_distribution), ALLOCATABLE :: col_dist INTEGER(KIND=int_8), ALLOCATABLE, DIMENSION(:) :: local_rowcols @@ -61,23 +61,23 @@ MODULE dbcsr_tas_types TYPE dbcsr_tas_mm_storage TYPE(dbcsr_tas_type), POINTER :: store_batched => NULL() ! intermediate replicated matrix TYPE(dbcsr_tas_type), POINTER :: store_batched_repl => NULL() ! intermediate replicated matrix - LOGICAL :: batched_out ! whether replicated matrix has been changed in mm and should be copied to actual matrix - LOGICAL :: batched_trans - TYPE(dbcsr_scalar_type) :: batched_beta + LOGICAL :: batched_out = .FALSE. ! whether replicated matrix has been changed in mm and should be copied to actual matrix + LOGICAL :: batched_trans = .FALSE. + TYPE(dbcsr_scalar_type) :: batched_beta = dbcsr_scalar_type() END TYPE ! type for tall-and-skinny matrices TYPE dbcsr_tas_type - TYPE(dbcsr_tas_distribution_type) :: dist + TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type() CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: row_blk_size CLASS(dbcsr_tas_rowcol_data), ALLOCATABLE :: col_blk_size - TYPE(dbcsr_type) :: matrix ! matrix on subgroup - INTEGER(KIND=int_8) :: nblkrows ! total number of rows - INTEGER(KIND=int_8) :: nblkcols ! total number of columns - INTEGER(KIND=int_8) :: nblkrowscols_split ! nblkrows or nblkcols depending on which is splitted - INTEGER(KIND=int_8) :: nfullrows ! total number of full (not blocked) rows - INTEGER(KIND=int_8) :: nfullcols ! total number of full (not blocked) columns + TYPE(dbcsr_type) :: matrix = dbcsr_type() ! matrix on subgroup + INTEGER(KIND=int_8) :: nblkrows = -1_int_8 ! total number of rows + INTEGER(KIND=int_8) :: nblkcols = -1_int_8 ! total number of columns + INTEGER(KIND=int_8) :: nblkrowscols_split = -1_int_8 ! nblkrows or nblkcols depending on which is splitted + INTEGER(KIND=int_8) :: nfullrows = -1_int_8 ! total number of full (not blocked) rows + INTEGER(KIND=int_8) :: nfullcols = -1_int_8 ! total number of full (not blocked) columns LOGICAL :: valid = .FALSE. ! has been created? ! storage and flags for batched matrix multiplication @@ -87,9 +87,9 @@ MODULE dbcsr_tas_types END TYPE TYPE dbcsr_tas_iterator - TYPE(dbcsr_tas_split_info) :: info - TYPE(dbcsr_tas_distribution_type) :: dist - TYPE(dbcsr_iterator) :: iter + TYPE(dbcsr_tas_split_info) :: info = dbcsr_tas_split_info() + TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type() + TYPE(dbcsr_iterator) :: iter = dbcsr_iterator() END TYPE dbcsr_tas_iterator END MODULE diff --git a/src/tensors/dbcsr_tensor_block.F b/src/tensors/dbcsr_tensor_block.F index 001302636ce..cf33614bd38 100644 --- a/src/tensors/dbcsr_tensor_block.F +++ b/src/tensors/dbcsr_tensor_block.F @@ -62,10 +62,10 @@ MODULE dbcsr_tensor_block ndims_iterator TYPE dbcsr_t_iterator_type - TYPE(dbcsr_tas_iterator) :: iter - TYPE(nd_to_2d_mapping) :: nd_index_blk - TYPE(nd_to_2d_mapping) :: nd_index - TYPE(array_list) :: blk_sizes, blk_offsets + TYPE(dbcsr_tas_iterator) :: iter = dbcsr_tas_iterator() + TYPE(nd_to_2d_mapping) :: nd_index_blk = nd_to_2d_mapping() + TYPE(nd_to_2d_mapping) :: nd_index = nd_to_2d_mapping() + TYPE(array_list) :: blk_sizes = array_list(), blk_offsets = array_list() END TYPE dbcsr_t_iterator_type #:for dparam, dtype, dsuffix in dtype_float_list diff --git a/src/tensors/dbcsr_tensor_index.F b/src/tensors/dbcsr_tensor_index.F index 88dcf8acdbf..282e6fb9c24 100644 --- a/src/tensors/dbcsr_tensor_index.F +++ b/src/tensors/dbcsr_tensor_index.F @@ -38,12 +38,12 @@ MODULE dbcsr_tensor_index permute_index TYPE nd_to_2d_mapping - INTEGER :: ndim_nd - INTEGER :: ndim1_2d - INTEGER :: ndim2_2d + INTEGER :: ndim_nd = -1 + INTEGER :: ndim1_2d = -1 + INTEGER :: ndim2_2d = -1 INTEGER, DIMENSION(:), ALLOCATABLE :: dims_nd - INTEGER(KIND=int_8), DIMENSION(2) :: dims_2d + INTEGER(KIND=int_8), DIMENSION(2) :: dims_2d = -1_int_8 INTEGER, DIMENSION(:), ALLOCATABLE :: dims1_2d INTEGER, DIMENSION(:), ALLOCATABLE :: dims2_2d @@ -51,8 +51,8 @@ MODULE dbcsr_tensor_index INTEGER, DIMENSION(:), ALLOCATABLE :: map2_2d INTEGER, DIMENSION(:), ALLOCATABLE :: map_nd - INTEGER :: base - LOGICAL :: col_major + INTEGER :: base = -1 + LOGICAL :: col_major = .FALSE. END TYPE nd_to_2d_mapping CONTAINS diff --git a/src/tensors/dbcsr_tensor_types.F b/src/tensors/dbcsr_tensor_types.F index f514690a08d..2bf38b7158c 100644 --- a/src/tensors/dbcsr_tensor_types.F +++ b/src/tensors/dbcsr_tensor_types.F @@ -103,42 +103,42 @@ MODULE dbcsr_tensor_types dbcsr_t_copy_contraction_storage TYPE dbcsr_t_pgrid_type - TYPE(nd_to_2d_mapping) :: nd_index_grid - TYPE(mp_comm_type) :: mp_comm_2d + TYPE(nd_to_2d_mapping) :: nd_index_grid = nd_to_2d_mapping() + TYPE(mp_comm_type) :: mp_comm_2d = mp_comm_type() TYPE(dbcsr_tas_split_info), ALLOCATABLE :: tas_split_info - INTEGER :: nproc + INTEGER :: nproc = -1 END TYPE TYPE dbcsr_t_contraction_storage - REAL(real_8) :: nsplit_avg - INTEGER :: ibatch - TYPE(array_list) :: batch_ranges - LOGICAL :: static + REAL(real_8) :: nsplit_avg = -1.0_real_8 + INTEGER :: ibatch = -1 + TYPE(array_list) :: batch_ranges = array_list() + LOGICAL :: static = .FALSE. END TYPE TYPE dbcsr_t_type TYPE(dbcsr_tas_type), POINTER :: matrix_rep => NULL() - TYPE(nd_to_2d_mapping) :: nd_index_blk - TYPE(nd_to_2d_mapping) :: nd_index - TYPE(array_list) :: blk_sizes - TYPE(array_list) :: blk_offsets - TYPE(array_list) :: nd_dist - TYPE(dbcsr_t_pgrid_type) :: pgrid - TYPE(array_list) :: blks_local + TYPE(nd_to_2d_mapping) :: nd_index_blk = nd_to_2d_mapping() + TYPE(nd_to_2d_mapping) :: nd_index = nd_to_2d_mapping() + TYPE(array_list) :: blk_sizes = array_list() + TYPE(array_list) :: blk_offsets = array_list() + TYPE(array_list) :: nd_dist = array_list() + TYPE(dbcsr_t_pgrid_type) :: pgrid = dbcsr_t_pgrid_type() + TYPE(array_list) :: blks_local = array_list() INTEGER, DIMENSION(:), ALLOCATABLE :: nblks_local INTEGER, DIMENSION(:), ALLOCATABLE :: nfull_local LOGICAL :: valid = .FALSE. LOGICAL :: owns_matrix = .FALSE. - CHARACTER(LEN=default_string_length) :: name + CHARACTER(LEN=default_string_length) :: name = "" ! lightweight reference counting for communicators: INTEGER, POINTER :: refcount => NULL() TYPE(dbcsr_t_contraction_storage), ALLOCATABLE :: contraction_storage END TYPE dbcsr_t_type TYPE dbcsr_t_distribution_type - TYPE(dbcsr_tas_distribution_type) :: dist - TYPE(dbcsr_t_pgrid_type) :: pgrid - TYPE(array_list) :: nd_dist + TYPE(dbcsr_tas_distribution_type) :: dist = dbcsr_tas_distribution_type() + TYPE(dbcsr_t_pgrid_type) :: pgrid = dbcsr_t_pgrid_type() + TYPE(array_list) :: nd_dist = array_list() ! lightweight reference counting for communicators: INTEGER, POINTER :: refcount => NULL() END TYPE @@ -150,7 +150,7 @@ MODULE dbcsr_tensor_types ! grid dimensions only for this matrix dimension: INTEGER, DIMENSION(:), ALLOCATABLE :: dims_grid ! dist only for tensor dimensions belonging to this matrix dimension: - TYPE(array_list) :: nd_dist + TYPE(array_list) :: nd_dist = array_list() CONTAINS ! map matrix index to process grid: PROCEDURE :: dist => tas_dist_t @@ -163,7 +163,7 @@ MODULE dbcsr_tensor_types ! tensor dimensions only for this matrix dimension: INTEGER, DIMENSION(:), ALLOCATABLE :: dims ! block size only for this matrix dimension: - TYPE(array_list) :: blk_size + TYPE(array_list) :: blk_size = array_list() CONTAINS PROCEDURE :: data => tas_blk_size_t END TYPE diff --git a/src/utils/dbcsr_btree.F b/src/utils/dbcsr_btree.F index 593aa03f9ff..3886f67ccd8 100644 --- a/src/utils/dbcsr_btree.F +++ b/src/utils/dbcsr_btree.F @@ -62,28 +62,28 @@ MODULE dbcsr_btree #:for nametype, nametype1, nametype2, type1, type2, defaultFormatType1, defaultFormatType2, accessorType2 in inst_params TYPE btree_node_${nametype}$ - INTEGER id - INTEGER :: filled - ${type1}$, DIMENSION(:), POINTER :: keys - ${type2}$, DIMENSION(:), POINTER :: values - TYPE(btree_node_p_${nametype}$), DIMENSION(:), POINTER :: subtrees - TYPE(btree_node_${nametype}$), POINTER :: parent + INTEGER :: id = -1 + INTEGER :: filled = -1 + ${type1}$, DIMENSION(:), POINTER :: keys => NULL() + ${type2}$, DIMENSION(:), POINTER :: values => NULL() + TYPE(btree_node_p_${nametype}$), DIMENSION(:), POINTER :: subtrees => NULL() + TYPE(btree_node_${nametype}$), POINTER :: parent => NULL() END TYPE btree_node_${nametype}$ TYPE btree_node_p_${nametype}$ - TYPE(btree_node_${nametype}$), POINTER :: node + TYPE(btree_node_${nametype}$), POINTER :: node => NULL() END TYPE btree_node_p_${nametype}$ TYPE btree_node_structure_${nametype}$ - INTEGER :: min_fill, max_fill - INTEGER :: n - INTEGER :: lastid - INTEGER :: refcount - TYPE(btree_node_${nametype}$), POINTER :: root + INTEGER :: min_fill = -1, max_fill = -1 + INTEGER :: n = -1 + INTEGER :: lastid = -1 + INTEGER :: refcount = -1 + TYPE(btree_node_${nametype}$), POINTER :: root => NULL() END TYPE btree_node_structure_${nametype}$ TYPE btree_${nametype}$ - TYPE(btree_node_structure_${nametype}$) :: b + TYPE(btree_node_structure_${nametype}$) :: b = btree_node_structure_${nametype}$ () END TYPE btree_${nametype}$ #:endfor diff --git a/src/utils/dbcsr_btree.fypp b/src/utils/dbcsr_btree.fypp index 85a8341d434..44093378ae1 100644 --- a/src/utils/dbcsr_btree.fypp +++ b/src/utils/dbcsr_btree.fypp @@ -11,32 +11,32 @@ #:def type2setup_1_get() TYPE btree_data_sp2d -REAL(KIND=sp), DIMENSION(:,:), POINTER :: p -LOGICAL :: tr +REAL(KIND=sp), DIMENSION(:,:), POINTER :: p => NULL() +LOGICAL :: tr = .FALSE. END TYPE btree_data_sp2d PUBLIC :: btree_data_sp2d #:enddef #:def type2setup_2_get() TYPE btree_data_dp2d -REAL(KIND=dp), DIMENSION(:,:), POINTER :: p -LOGICAL :: tr +REAL(KIND=dp), DIMENSION(:,:), POINTER :: p => NULL() +LOGICAL :: tr = .FALSE. END TYPE btree_data_dp2d PUBLIC :: btree_data_dp2d #:enddef #:def type2setup_3_get() TYPE btree_data_cp2d -COMPLEX(KIND=sp), DIMENSION(:,:), POINTER :: p -LOGICAL :: tr +COMPLEX(KIND=sp), DIMENSION(:,:), POINTER :: p => NULL() +LOGICAL :: tr = .FALSE. END TYPE btree_data_cp2d PUBLIC :: btree_data_cp2d #:enddef #:def type2setup_4_get() TYPE btree_data_zp2d -COMPLEX(KIND=dp), DIMENSION(:,:), POINTER :: p -LOGICAL :: tr +COMPLEX(KIND=dp), DIMENSION(:,:), POINTER :: p => NULL() +LOGICAL :: tr = .FALSE. END TYPE btree_data_zp2d PUBLIC :: btree_data_zp2d #:enddef diff --git a/src/utils/dbcsr_files.F b/src/utils/dbcsr_files.F index 7eed916a308..a48710ce816 100644 --- a/src/utils/dbcsr_files.F +++ b/src/utils/dbcsr_files.F @@ -32,8 +32,8 @@ MODULE dbcsr_files TYPE preconnection_type PRIVATE - CHARACTER(LEN=default_path_length) :: file_name - INTEGER :: unit_number + CHARACTER(LEN=default_path_length) :: file_name = "" + INTEGER :: unit_number = -1 END TYPE preconnection_type TYPE(preconnection_type), DIMENSION(max_preconnections) :: preconnected diff --git a/src/utils/dbcsr_min_heap.F b/src/utils/dbcsr_min_heap.F index be438aeb242..a4fbb23c5aa 100644 --- a/src/utils/dbcsr_min_heap.F +++ b/src/utils/dbcsr_min_heap.F @@ -24,18 +24,18 @@ MODULE dbcsr_min_heap INTEGER, PARAMETER :: valt = int_4 TYPE dbcsr_heap_node - INTEGER(KIND=keyt) :: key - INTEGER(KIND=valt) :: value + INTEGER(KIND=keyt) :: key = -1_keyt + INTEGER(KIND=valt) :: value = -1_valt END TYPE dbcsr_heap_node TYPE dbcsr_heap_node_e - TYPE(dbcsr_heap_node) :: node + TYPE(dbcsr_heap_node) :: node = dbcsr_heap_node() END TYPE dbcsr_heap_node_e TYPE dbcsr_heap_type - INTEGER :: n - INTEGER, DIMENSION(:), POINTER :: index - TYPE(dbcsr_heap_node_e), DIMENSION(:), POINTER :: nodes + INTEGER :: n = -1 + INTEGER, DIMENSION(:), POINTER :: index => NULL() + TYPE(dbcsr_heap_node_e), DIMENSION(:), POINTER :: nodes => NULL() END TYPE dbcsr_heap_type CONTAINS diff --git a/src/work/dbcsr_work_operations.F b/src/work/dbcsr_work_operations.F index dbab7e229aa..fe3779eee86 100644 --- a/src/work/dbcsr_work_operations.F +++ b/src/work/dbcsr_work_operations.F @@ -108,7 +108,7 @@ MODULE dbcsr_work_operations END INTERFACE TYPE i_array_p - INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: p + INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: p => NULL() END TYPE i_array_p CONTAINS diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1eeadafb63d..509bbd1a871 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -15,9 +15,13 @@ if (USE_MPI) else () set(num_ranks ${TEST_MPI_RANKS}) endif () + math(EXPR test_processors "${num_ranks} * ${NUM_THREADS}") + message( "Tests will run with ${num_ranks} MPI ranks and ${NUM_THREADS} OpenMP threads each" ) +else () + set(test_processors ${NUM_THREADS}) endif () # =================================== DBCSR PERF TESTS @@ -52,8 +56,10 @@ foreach (dbcsr_perf_test ${DBCSR_PERF_TESTS}) COMMAND $ "${CMAKE_CURRENT_SOURCE_DIR}/${dbcsr_perf_test}") endif () - set_tests_properties(dbcsr_perf:${dbcsr_perf_test} - PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS}) + set_tests_properties( + dbcsr_perf:${dbcsr_perf_test} + PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS + ${test_processors}) endforeach () # =================================== DBCSR CORRECTNESS TESTS Define all the @@ -131,9 +137,10 @@ foreach (dbcsr_test ${DBCSR_TESTS_FTN}) endif () if (OpenMP_FOUND) target_link_libraries(${dbcsr_test} OpenMP::OpenMP_Fortran) - set_tests_properties(${dbcsr_test} - PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS}) endif () + set_tests_properties( + ${dbcsr_test} PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} + PROCESSORS ${test_processors}) endforeach () # set the __SHORT_FILE__ per file for dbcsr sources @@ -150,6 +157,10 @@ if (WITH_C_API) get_filename_component(dbcsr_test_cpp_name ${dbcsr_test_cpp_src} NAME_WE) add_executable(${dbcsr_test_cpp_name} ${dbcsr_test_cpp_src}) target_link_libraries(${dbcsr_test_cpp_name} dbcsr_c MPI::MPI_CXX) + set_target_properties(${dbcsr_test_cpp_name} PROPERTIES LINKER_LANGUAGE CXX) + if (OpenMP_FOUND) + target_link_libraries(${dbcsr_test_cpp_name} OpenMP::OpenMP_CXX) + endif () # register unittest executable with CMake if (USE_MPI) separate_arguments(MPIEXEC_PREFLAGS) @@ -161,11 +172,10 @@ if (WITH_C_API) else () add_test(NAME ${dbcsr_test_cpp_name} COMMAND ./${dbcsr_test_cpp_name}) endif () - if (OpenMP_FOUND) - set_tests_properties( - ${dbcsr_test_cpp_name} PROPERTIES ENVIRONMENT - OMP_NUM_THREADS=${NUM_THREADS}) - endif () + set_tests_properties( + ${dbcsr_test_cpp_name} + PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS + ${test_processors}) endforeach () endif () @@ -178,11 +188,10 @@ if (NOT USE_MPI) target_link_libraries(${dbcsr_test_backend} PRIVATE dbcsr) # register unittest executable with CMake add_test(NAME ${dbcsr_test_backend} COMMAND ./${dbcsr_test_backend}) - if (OpenMP_FOUND) - set_tests_properties( - ${dbcsr_test_backend} PROPERTIES ENVIRONMENT - OMP_NUM_THREADS=${NUM_THREADS}) - endif () + set_tests_properties( + ${dbcsr_test_backend} + PROPERTIES ENVIRONMENT OMP_NUM_THREADS=${NUM_THREADS} PROCESSORS + ${NUM_THREADS}) endforeach () endif () @@ -239,6 +248,11 @@ if (USE_ACCEL MATCHES "cuda|hip") target_link_libraries( ${libsmm_acc_test_name} dbcsr $<$:hip::host> $<$:CUDA::cuda_driver> libsmm_acc) + set_target_properties(${libsmm_acc_test_name} PROPERTIES LINKER_LANGUAGE + CXX) + if (OpenMP_FOUND) + target_link_libraries(${libsmm_acc_test_name} OpenMP::OpenMP_CXX) + endif () endforeach () # Comment for the moment, they are not parallelized, very slow... Check issue diff --git a/tests/dbcsr_test.cpp b/tests/dbcsr_test.cpp index b7865101440..e7fa02bb0d4 100644 --- a/tests/dbcsr_test.cpp +++ b/tests/dbcsr_test.cpp @@ -51,8 +51,8 @@ int main(int argc, char* argv[]) { for (int i = 0; i != mpi_size; ++i) { if (mpi_rank == i) { - std::cout << "I'm processor " << mpi_rank << " over " << mpi_size << " proc" << ", (" << coord[0] << ", " << coord[1] - << ") in the 2D grid" << std::endl; + std::cout << "I'm processor " << mpi_rank << " over " << mpi_size << " proc" + << ", (" << coord[0] << ", " << coord[1] << ") in the 2D grid" << std::endl; } MPI_Barrier(MPI_COMM_WORLD); }