Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 47 additions & 4 deletions .github/workflows/build-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ on:
workflow_dispatch:
inputs:
cuda:
description: "CUDA Toolkit version"
description: "CUDA Toolkit major.minor version"
type: string
required: false
default: "13.0"
Expand Down Expand Up @@ -113,14 +113,50 @@ jobs:
aws-region: us-east-2
role-duration-seconds: 43200

- name: Validate Windows build inputs
id: validate_windows_build_inputs
env:
NVBENCH_WINDOWS_CUDA: ${{ inputs.cuda }}
NVBENCH_WINDOWS_STD: ${{ inputs.std }}
NVBENCH_WINDOWS_ARCH: ${{ inputs.arch }}
run: |
$ErrorActionPreference = "Stop"

if ($env:NVBENCH_WINDOWS_CUDA -notmatch '^\d+\.\d+$') {
throw "Invalid CUDA version '$env:NVBENCH_WINDOWS_CUDA'. Expected '<major>.<minor>', for example '13.0'."
}

if (@("17", "20") -notcontains $env:NVBENCH_WINDOWS_STD) {
throw "Invalid C++ standard '$env:NVBENCH_WINDOWS_STD'. Expected '17' or '20'."
}

$arch = "$env:NVBENCH_WINDOWS_ARCH".Trim()
$normalizedArch = $arch
if ($arch) {
if (@("all", "all-major", "native") -notcontains $arch) {
$archItems = @($arch -split '[;,]' | ForEach-Object { $_.Trim() } | Where-Object { $_ })
if ($archItems.Length -eq 0) {
throw "Invalid CMAKE_CUDA_ARCHITECTURES value '$arch'. Expected empty, 'all', 'all-major', 'native', or a list like '80;90-real'."
}
foreach ($archItem in $archItems) {
if ($archItem -notmatch '^\d{2,3}(-real|-virtual)?$') {
throw "Invalid CMAKE_CUDA_ARCHITECTURES value '$arch'. Expected empty, 'all', 'all-major', 'native', or a list like '80;90-real'."
}
}
$normalizedArch = $archItems -join ';'
}
}
"arch=$normalizedArch" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append

- name: Fetch Windows devcontainer image
run: |
docker pull "$env:WINDOWS_CI_IMAGE"

- name: Build NVBench
env:
NVBENCH_WINDOWS_CUDA: ${{ inputs.cuda }}
NVBENCH_WINDOWS_STD: ${{ inputs.std }}
NVBENCH_WINDOWS_ARCH: ${{ inputs.arch }}
NVBENCH_WINDOWS_ARCH: ${{ steps.validate_windows_build_inputs.outputs.arch }}
run: |
$ErrorActionPreference = "Stop"

Expand All @@ -131,7 +167,8 @@ jobs:
@"
`$ErrorActionPreference = 'Stop'
git config --global --add safe.directory '$containerRepo'
& '$containerRepo/ci/windows/build_nvbench.ps1' -std '$env:NVBENCH_WINDOWS_STD' -arch '$env:NVBENCH_WINDOWS_ARCH'
& '$containerRepo/ci/windows/install_cuda_profiler_api.ps1' -cudaVersion "`$env:NVBENCH_WINDOWS_CUDA"
& '$containerRepo/ci/windows/build_nvbench.ps1' -std "`$env:NVBENCH_WINDOWS_STD" -arch "`$env:NVBENCH_WINDOWS_ARCH" -device-testing `$true
exit `$LASTEXITCODE
"@ | Set-Content -Path $script -Encoding UTF8

Expand All @@ -152,13 +189,19 @@ jobs:
"--env", "GITHUB_REPOSITORY=$env:GITHUB_REPOSITORY",
"--env", "GITHUB_RUN_ID=$env:GITHUB_RUN_ID",
"--env", "GITHUB_SHA=$env:GITHUB_SHA",
"--env", "NVBENCH_WINDOWS_ARCH=$env:NVBENCH_WINDOWS_ARCH",
"--env", "NVBENCH_WINDOWS_CUDA=$env:NVBENCH_WINDOWS_CUDA",
"--env", "NVBENCH_WINDOWS_STD=$env:NVBENCH_WINDOWS_STD",
"--env", "SCCACHE_BUCKET=$env:SCCACHE_BUCKET",
"--env", "SCCACHE_IDLE_TIMEOUT=$env:SCCACHE_IDLE_TIMEOUT",
"--env", "SCCACHE_REGION=$env:SCCACHE_REGION",
"--env", "SCCACHE_S3_NO_CREDENTIALS=$env:SCCACHE_S3_NO_CREDENTIALS",
"--env", "SCCACHE_S3_PREPROCESSOR_CACHE_KEY_PREFIX=$env:SCCACHE_S3_PREPROCESSOR_CACHE_KEY_PREFIX",
"--env", "SCCACHE_S3_USE_PREPROCESSOR_CACHE_MODE=$env:SCCACHE_S3_USE_PREPROCESSOR_CACHE_MODE",
"--env", "SCCACHE_S3_USE_SSL=$env:SCCACHE_S3_USE_SSL",
"--env", "SCCACHE_S3_USE_SSL=$env:SCCACHE_S3_USE_SSL"
)

$dockerArgs += @(
"$env:WINDOWS_CI_IMAGE",
"powershell", "-NoLogo", "-NoProfile", "-ExecutionPolicy", "Bypass",
"-File", $containerScript
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,6 @@ jobs:

nvbench-windows:
name: NVBench Windows CUDA${{ matrix.config.cuda }} ${{ matrix.config.host }} C++${{ matrix.config.std }}
# TODO: Re-enable after https://github.com/NVIDIA/nvbench/pull/354 fixes the Windows build.
if: false
permissions:
id-token: write
contents: read
Expand Down
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ if (${CUDAToolkit_VERSION} VERSION_LESS 11.3)
endif()

option(BUILD_SHARED_LIBS "Build NVBench as a shared library" ON)
if (WIN32 AND BUILD_SHARED_LIBS)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
endif()

option(NVBench_ENABLE_NVML "Build with NVML support from the Cuda Toolkit." ON)
option(NVBench_ENABLE_CUPTI "Build NVBench with CUPTI." ${cupti_default})
Expand Down
10 changes: 8 additions & 2 deletions ci/windows/build_nvbench.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ Param(

[Parameter(Mandatory = $false)]
[Alias("cmake-options")]
[string]$CMAKE_OPTIONS = ""
[string]$CMAKE_OPTIONS = "",

[Parameter(Mandatory = $false)]
[Alias("device-testing")]
[bool]$DEVICE_TESTING = $false
)

$ErrorActionPreference = "Stop"
Expand All @@ -30,9 +34,11 @@ try {
Print-EnvironmentDetails

$preset = "nvbench-ci"
$deviceTestingOption = if ($DEVICE_TESTING) { "ON" } else { "OFF" }
$localOptions = @(
"-DCMAKE_CXX_STANDARD=$CXX_STANDARD",
"-DCMAKE_CUDA_STANDARD=$CXX_STANDARD"
"-DCMAKE_CUDA_STANDARD=$CXX_STANDARD",
"-DNVBench_ENABLE_DEVICE_TESTING=$deviceTestingOption"
)

Configure-And-Build-Preset "NVBench" $preset $localOptions
Expand Down
Loading
Loading