From 269b76100f821163a030c5a11c576c859c529eeb Mon Sep 17 00:00:00 2001 From: "Yadav, Rishi" Date: Tue, 14 Oct 2025 18:23:05 +0000 Subject: [PATCH 1/4] CI: Detect IGC versions from installed drivers in G++ host workflow --- .github/workflows/intel_test.yml | 32 +++++++++++++++++------ .github/workflows/intel_test_gpp_host.yml | 30 ++++++++++++++++----- test/unit/cute/intel_xe/CMakeLists.txt | 7 ----- 3 files changed, 48 insertions(+), 21 deletions(-) diff --git a/.github/workflows/intel_test.yml b/.github/workflows/intel_test.yml index e32c8128e3..9356c5f45f 100644 --- a/.github/workflows/intel_test.yml +++ b/.github/workflows/intel_test.yml @@ -43,22 +43,16 @@ jobs: gpu: BMG intel_graphics: ROLLING sycl_target: intel_gpu_bmg_g21 - igc_version_major: 2 - igc_version_minor: 18 runner: bmg108629-01 - compiler: RELEASE gpu: PVC intel_graphics: ROLLING sycl_target: intel_gpu_pvc - igc_version_major: 2 - igc_version_minor: 11 runner: pvc146162-01 - compiler: NIGHTLY gpu: PVC intel_graphics: ROLLING sycl_target: intel_gpu_pvc - igc_version_major: 2 - igc_version_minor: 11 runner: pvc146162-01 name: Run Intel ${{ matrix.compiler }} tests on ${{ matrix.gpu }} with intel-graphics ${{ matrix.intel_graphics }} @@ -103,14 +97,36 @@ jobs: which $CXX $CXX --version sycl-ls + - name: Detect IGC Version + id: igc-version + shell: bash + run: | + # Get IGC version from installed driver and extract first two parts + IGC_VERSION=$(dpkg -l | grep intel-igc-core | awk '{print $3}' | cut -d'-' -f1) + echo "Full IGC Version detected: $IGC_VERSION" + + # Extract major and minor versions (first two parts only) + IGC_MAJOR=$(echo $IGC_VERSION | cut -d'.' -f1) + IGC_MINOR=$(echo $IGC_VERSION | cut -d'.' -f2) + + # Verify we got the versions + if [ -z "$IGC_MAJOR" ] || [ -z "$IGC_MINOR" ]; then + echo "Error: Failed to extract IGC version numbers" + exit 1 + fi + + echo "IGC_VERSION_MAJOR=$IGC_MAJOR" >> $GITHUB_ENV + echo "IGC_VERSION_MINOR=$IGC_MINOR" >> $GITHUB_ENV + echo "Using IGC Version: $IGC_MAJOR.$IGC_MINOR (from $IGC_VERSION)" + - name: Build shell: bash run: | cmake -G Ninja \ -DCUTLASS_ENABLE_SYCL=ON \ -DDPCPP_SYCL_TARGET=${{ matrix.sycl_target }} \ - -DIGC_VERSION_MAJOR=${{ matrix.igc_version_major }} \ - -DIGC_VERSION_MINOR=${{ matrix.igc_version_minor }} \ + -DIGC_VERSION_MAJOR=${{ env.IGC_VERSION_MAJOR }} \ + -DIGC_VERSION_MINOR=${{ env.IGC_VERSION_MINOR }} \ -DCMAKE_CXX_FLAGS="-Werror" \ -DCUTLASS_SYCL_RUNNING_CI=ON cmake --build . diff --git a/.github/workflows/intel_test_gpp_host.yml b/.github/workflows/intel_test_gpp_host.yml index 87d588af0f..c85f0c50f2 100644 --- a/.github/workflows/intel_test_gpp_host.yml +++ b/.github/workflows/intel_test_gpp_host.yml @@ -28,15 +28,11 @@ jobs: gpu: BMG intel_graphics: ROLLING sycl_target: intel_gpu_bmg_g21 - igc_version_major: 2 - igc_version_minor: 18 runner: bmg108629-01 - compiler: RELEASE gpu: PVC intel_graphics: ROLLING sycl_target: intel_gpu_pvc - igc_version_major: 2 - igc_version_minor: 11 runner: pvc146162-01 @@ -81,14 +77,36 @@ jobs: $CXX --version g++-13 --version sycl-ls + - name: Detect IGC Version + id: igc-version + shell: bash + run: | + # Get IGC version from installed driver and extract first two parts + IGC_VERSION=$(dpkg -l | grep intel-igc-core | awk '{print $3}' | cut -d'-' -f1) + echo "Full IGC Version detected: $IGC_VERSION" + + # Extract major and minor versions (first two parts only) + IGC_MAJOR=$(echo $IGC_VERSION | cut -d'.' -f1) + IGC_MINOR=$(echo $IGC_VERSION | cut -d'.' -f2) + + # Verify we got the versions + if [ -z "$IGC_MAJOR" ] || [ -z "$IGC_MINOR" ]; then + echo "Error: Failed to extract IGC version numbers" + exit 1 + fi + + echo "IGC_VERSION_MAJOR=$IGC_MAJOR" >> $GITHUB_ENV + echo "IGC_VERSION_MINOR=$IGC_MINOR" >> $GITHUB_ENV + echo "Using IGC Version: $IGC_MAJOR.$IGC_MINOR (from $IGC_VERSION)" + - name: Build shell: bash run: | cmake -G Ninja \ -DCUTLASS_ENABLE_SYCL=ON \ -DDPCPP_SYCL_TARGET=${{ matrix.sycl_target }} \ - -DIGC_VERSION_MAJOR=${{ matrix.igc_version_major }} \ - -DIGC_VERSION_MINOR=${{ matrix.igc_version_minor }} \ + -DIGC_VERSION_MAJOR=${{ env.IGC_VERSION_MAJOR }} \ + -DIGC_VERSION_MINOR=${{ env.IGC_VERSION_MINOR }} \ -DCUTLASS_SYCL_RUNNING_CI=ON \ -DCMAKE_CXX_FLAGS="-Werror" \ -DDPCPP_HOST_COMPILER=g++-13 diff --git a/test/unit/cute/intel_xe/CMakeLists.txt b/test/unit/cute/intel_xe/CMakeLists.txt index cdd23be94c..6601a47de0 100755 --- a/test/unit/cute/intel_xe/CMakeLists.txt +++ b/test/unit/cute/intel_xe/CMakeLists.txt @@ -26,13 +26,6 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -if(NOT DEFINED IGC_VERSION_MAJOR) - set(IGC_VERSION_MAJOR 2) -endif() -if(NOT DEFINED IGC_VERSION_MINOR) - set(IGC_VERSION_MINOR 18) -endif() - add_compile_definitions( IGC_VERSION_MAJOR=${IGC_VERSION_MAJOR} IGC_VERSION_MINOR=${IGC_VERSION_MINOR} From 5057226488df81f440a4ae706f30fbeb2840f925 Mon Sep 17 00:00:00 2001 From: Rishi Yadav Date: Wed, 22 Oct 2025 18:31:33 +0530 Subject: [PATCH 2/4] Update intel_test.yml --- .github/workflows/intel_test.yml | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/.github/workflows/intel_test.yml b/.github/workflows/intel_test.yml index 9356c5f45f..b596187ead 100644 --- a/.github/workflows/intel_test.yml +++ b/.github/workflows/intel_test.yml @@ -97,27 +97,6 @@ jobs: which $CXX $CXX --version sycl-ls - - name: Detect IGC Version - id: igc-version - shell: bash - run: | - # Get IGC version from installed driver and extract first two parts - IGC_VERSION=$(dpkg -l | grep intel-igc-core | awk '{print $3}' | cut -d'-' -f1) - echo "Full IGC Version detected: $IGC_VERSION" - - # Extract major and minor versions (first two parts only) - IGC_MAJOR=$(echo $IGC_VERSION | cut -d'.' -f1) - IGC_MINOR=$(echo $IGC_VERSION | cut -d'.' -f2) - - # Verify we got the versions - if [ -z "$IGC_MAJOR" ] || [ -z "$IGC_MINOR" ]; then - echo "Error: Failed to extract IGC version numbers" - exit 1 - fi - - echo "IGC_VERSION_MAJOR=$IGC_MAJOR" >> $GITHUB_ENV - echo "IGC_VERSION_MINOR=$IGC_MINOR" >> $GITHUB_ENV - echo "Using IGC Version: $IGC_MAJOR.$IGC_MINOR (from $IGC_VERSION)" - name: Build shell: bash @@ -125,8 +104,6 @@ jobs: cmake -G Ninja \ -DCUTLASS_ENABLE_SYCL=ON \ -DDPCPP_SYCL_TARGET=${{ matrix.sycl_target }} \ - -DIGC_VERSION_MAJOR=${{ env.IGC_VERSION_MAJOR }} \ - -DIGC_VERSION_MINOR=${{ env.IGC_VERSION_MINOR }} \ -DCMAKE_CXX_FLAGS="-Werror" \ -DCUTLASS_SYCL_RUNNING_CI=ON cmake --build . From 6a2f6dc82ac973f4adbc78fdee5724e7c2863c1c Mon Sep 17 00:00:00 2001 From: Rishi Yadav Date: Wed, 22 Oct 2025 18:32:20 +0530 Subject: [PATCH 3/4] Update intel_test_gpp_host.yml --- .github/workflows/intel_test_gpp_host.yml | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/.github/workflows/intel_test_gpp_host.yml b/.github/workflows/intel_test_gpp_host.yml index c85f0c50f2..43680cfaad 100644 --- a/.github/workflows/intel_test_gpp_host.yml +++ b/.github/workflows/intel_test_gpp_host.yml @@ -77,27 +77,6 @@ jobs: $CXX --version g++-13 --version sycl-ls - - name: Detect IGC Version - id: igc-version - shell: bash - run: | - # Get IGC version from installed driver and extract first two parts - IGC_VERSION=$(dpkg -l | grep intel-igc-core | awk '{print $3}' | cut -d'-' -f1) - echo "Full IGC Version detected: $IGC_VERSION" - - # Extract major and minor versions (first two parts only) - IGC_MAJOR=$(echo $IGC_VERSION | cut -d'.' -f1) - IGC_MINOR=$(echo $IGC_VERSION | cut -d'.' -f2) - - # Verify we got the versions - if [ -z "$IGC_MAJOR" ] || [ -z "$IGC_MINOR" ]; then - echo "Error: Failed to extract IGC version numbers" - exit 1 - fi - - echo "IGC_VERSION_MAJOR=$IGC_MAJOR" >> $GITHUB_ENV - echo "IGC_VERSION_MINOR=$IGC_MINOR" >> $GITHUB_ENV - echo "Using IGC Version: $IGC_MAJOR.$IGC_MINOR (from $IGC_VERSION)" - name: Build shell: bash @@ -105,8 +84,6 @@ jobs: cmake -G Ninja \ -DCUTLASS_ENABLE_SYCL=ON \ -DDPCPP_SYCL_TARGET=${{ matrix.sycl_target }} \ - -DIGC_VERSION_MAJOR=${{ env.IGC_VERSION_MAJOR }} \ - -DIGC_VERSION_MINOR=${{ env.IGC_VERSION_MINOR }} \ -DCUTLASS_SYCL_RUNNING_CI=ON \ -DCMAKE_CXX_FLAGS="-Werror" \ -DDPCPP_HOST_COMPILER=g++-13 From eee878de0d742f0314471e13679e8400784af9f0 Mon Sep 17 00:00:00 2001 From: Rishi Yadav Date: Wed, 22 Oct 2025 18:34:29 +0530 Subject: [PATCH 4/4] Update CMakeLists.txt --- CMakeLists.txt | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0110c4d71..c5b5b080a0 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,6 +125,67 @@ option(CUTLASS_SYCL_BUILTIN_ENABLE "Enable this option to use builtin functions if (CUTLASS_ENABLE_SYCL) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + # Auto-detect IGC version for Intel targets + function(detect_igc_version) + # Check if IGC_VERSION_MAJOR/MINOR are already set + if(IGC_VERSION_MAJOR AND IGC_VERSION_MINOR) + # Validate minimum version requirement (IGC 2.18+ for PVC features) + if(IGC_VERSION_MAJOR LESS 2 OR (IGC_VERSION_MAJOR EQUAL 2 AND IGC_VERSION_MINOR LESS 18)) + message(WARNING "User-provided IGC version ${IGC_VERSION_MAJOR}.${IGC_VERSION_MINOR} is below minimum requirement. Enforcing IGC 2.18 minimum for PVC compatibility.") + set(IGC_VERSION_MAJOR 2 PARENT_SCOPE) + set(IGC_VERSION_MINOR 18 PARENT_SCOPE) + message(STATUS "Using enforced minimum IGC version: 2.18") + else() + message(STATUS "Using user-provided IGC version: ${IGC_VERSION_MAJOR}.${IGC_VERSION_MINOR}") + endif() + return() + endif() + + # Try ocloc query for driver version + find_program(OCLOC_EXECUTABLE ocloc) + if(OCLOC_EXECUTABLE) + execute_process( + COMMAND ${OCLOC_EXECUTABLE} query OCL_DRIVER_VERSION + OUTPUT_VARIABLE OCL_DRIVER_VERSION + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # Extract driver minor version from 25.X.Y format + if(OCL_DRIVER_VERSION MATCHES "^25\\.([0-9]+)") + set(DRIVER_MINOR ${CMAKE_MATCH_1}) + + # Map driver version to IGC version (enforce minimum 2.18 for PVC compatibility) + if(DRIVER_MINOR EQUAL 42) + set(IGC_MAJOR 2) + set(IGC_MINOR 21) + elseif(DRIVER_MINOR GREATER_EQUAL 39) + set(IGC_MAJOR 2) + set(IGC_MINOR 20) + elseif(DRIVER_MINOR GREATER_EQUAL 37) + set(IGC_MAJOR 2) + set(IGC_MINOR 19) + elseif(DRIVER_MINOR GREATER_EQUAL 34) + set(IGC_MAJOR 2) + set(IGC_MINOR 18) + else() + # For any older driver, use IGC 2.18 minimum (required for PVC features) + set(IGC_MAJOR 2) + set(IGC_MINOR 18) + endif() + + set(IGC_VERSION_MAJOR ${IGC_MAJOR} PARENT_SCOPE) + set(IGC_VERSION_MINOR ${IGC_MINOR} PARENT_SCOPE) + message(STATUS "Auto-detected IGC version: ${IGC_MAJOR}.${IGC_MINOR} (driver ${OCL_DRIVER_VERSION})") + return() + endif() + endif() + + # Fallback to PVC-safe default + set(IGC_VERSION_MAJOR 2 PARENT_SCOPE) + set(IGC_VERSION_MINOR 18 PARENT_SCOPE) + message(WARNING "Could not detect IGC version. Using IGC 2.18 default (PVC-compatible). Override with -DIGC_VERSION_MAJOR=X -DIGC_VERSION_MINOR=Y") + endfunction() + if(DPCPP_SYCL_TARGET STREQUAL "nvptx64-nvidia-cuda") set(SYCL_NVIDIA_TARGET ON) add_compile_definitions(SYCL_NVIDIA_TARGET) @@ -133,6 +194,21 @@ if (CUTLASS_ENABLE_SYCL) DPCPP_SYCL_TARGET STREQUAL "intel_gpu_bmg_g21") set(SYCL_INTEL_TARGET ON) add_compile_definitions(SYCL_INTEL_TARGET) + + # Auto-detect IGC version for Intel targets + detect_igc_version() + + # Make IGC version variables cacheable so users can override them + set(IGC_VERSION_MAJOR ${IGC_VERSION_MAJOR} CACHE STRING "Intel Graphics Compiler major version") + set(IGC_VERSION_MINOR ${IGC_VERSION_MINOR} CACHE STRING "Intel Graphics Compiler minor version") + + message(STATUS "Using IGC version: ${IGC_VERSION_MAJOR}.${IGC_VERSION_MINOR}") + + # Note about SPIR-V targets + if(DPCPP_SYCL_TARGET STREQUAL "spir64") + message(STATUS "Note: For SPIR-V targets, IGC version is determined at runtime. " + "The detected version (${IGC_VERSION_MAJOR}.${IGC_VERSION_MINOR}) may differ from runtime IGC.") + endif() add_compile_options(-Wall -Wno-unused-variable -Wno-unused-local-typedef