Buckets:
| # Compile-time profiling using clang -ftime-trace + ClangBuildAnalyzer. | |
| # | |
| # Usage: | |
| # .\scripts\build-profile.ps1 [-Full] [-Jobs N] | |
| # | |
| # -Full : include Server, Tools, and Tests (default: minimal build) | |
| # -Jobs : number of parallel jobs (default: all cores) | |
| # | |
| # Requires ClangBuildAnalyzer: | |
| # https://github.com/aras-p/ClangBuildAnalyzer | |
| param( | |
| [switch]$Full, | |
| [int]$Jobs = [Environment]::ProcessorCount | |
| ) | |
| $ErrorActionPreference = "Stop" | |
| $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path | |
| $RootDir = Split-Path -Parent $ScriptDir | |
| if ($Full) { | |
| $BuildDir = Join-Path $RootDir "build-profile-full" | |
| $Report = Join-Path $BuildDir "profile-report-full.txt" | |
| } else { | |
| $BuildDir = Join-Path $RootDir "build-profile-baseline" | |
| $Report = Join-Path $BuildDir "profile-report.txt" | |
| } | |
| $OutputBin = Join-Path $BuildDir "clang_analysis.bin" | |
| if (-not (Get-Command clang++ -ErrorAction SilentlyContinue)) { | |
| Write-Error "clang++ not found" | |
| exit 1 | |
| } | |
| if (-not (Get-Command ninja -ErrorAction SilentlyContinue)) { | |
| Write-Error "ninja not found (required so cmake does not fall back to the Visual Studio/MSVC generator)" | |
| exit 1 | |
| } | |
| if (-not (Get-Command ClangBuildAnalyzer -ErrorAction SilentlyContinue)) { | |
| Write-Error "ClangBuildAnalyzer not found`n https://github.com/aras-p/ClangBuildAnalyzer/releases" | |
| exit 1 | |
| } | |
| $ClangVer = (clang++ --version | Select-Object -First 1) | |
| Write-Host "compiler : $ClangVer" | |
| Write-Host "build dir: $BuildDir" | |
| Write-Host "output : $OutputBin" | |
| Write-Host "jobs : $Jobs" | |
| Write-Host "" | |
| if (Get-Command ccache -ErrorAction SilentlyContinue) { | |
| Write-Host "clearing ccache..." | |
| ccache -C -z | |
| } | |
| $env:CCACHE_DISABLE = "1" | |
| $TestsFlag = if ($Full) { "ON" } else { "OFF" } | |
| $ToolsFlag = if ($Full) { "ON" } else { "OFF" } | |
| $ServerFlag = if ($Full) { "ON" } else { "OFF" } | |
| cmake --fresh ` | |
| -S $RootDir ` | |
| -B $BuildDir ` | |
| -G "Ninja" ` | |
| -DCMAKE_BUILD_TYPE=Release ` | |
| -DCMAKE_C_COMPILER=clang ` | |
| -DCMAKE_CXX_COMPILER=clang++ ` | |
| -DCMAKE_C_FLAGS="-ftime-trace" ` | |
| -DCMAKE_CXX_FLAGS="-ftime-trace" ` | |
| -DGGML_CCACHE=OFF ` | |
| -DGGML_OPENMP=ON ` | |
| -DGGML_NATIVE=OFF ` | |
| "-DLLAMA_BUILD_TESTS=$TestsFlag" ` | |
| -DLLAMA_BUILD_EXAMPLES=OFF ` | |
| "-DLLAMA_BUILD_TOOLS=$ToolsFlag" ` | |
| "-DLLAMA_BUILD_SERVER=$ServerFlag" ` | |
| -DLLAMA_BUILD_APP=OFF | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| $StrayTrace = Join-Path $RootDir "-.json" | |
| if (Test-Path $StrayTrace) { | |
| Remove-Item $StrayTrace -Force | |
| } | |
| Write-Host "" | |
| Write-Host "Initializing ClangBuildAnalyzer..." | |
| ClangBuildAnalyzer --start $BuildDir | |
| Write-Host "" | |
| Write-Host "building..." | |
| Write-Host "" | |
| $StartTime = Get-Date | |
| cmake --build $BuildDir --clean-first -j $Jobs | |
| if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } | |
| $Elapsed = (Get-Date) - $StartTime | |
| Write-Host "" | |
| Write-Host ("build time: {0}s ({1}m {2}s)" -f [int]$Elapsed.TotalSeconds, [int]$Elapsed.TotalMinutes, $Elapsed.Seconds) | |
| Write-Host "" | |
| Write-Host "Aggregating profile metrics..." | |
| ClangBuildAnalyzer --stop $BuildDir $OutputBin | Out-Null | |
| Write-Host "" | |
| Write-Host ("=" * 80) | |
| $TUs = "?" | |
| if (Test-Path $Report) { | |
| $Match = Select-String -Path $Report -Pattern "Compilation \((\d+)" | Select-Object -First 1 | |
| if ($Match) { $TUs = $Match.Matches[0].Groups[1].Value } | |
| } | |
| ClangBuildAnalyzer --analyze $OutputBin | Tee-Object -FilePath $Report | |
| Write-Host "" | |
| Write-Host "translation units: $TUs" | |
| Write-Host "" | |
| Write-Host "largest trace files (top 20 by size):" | |
| Get-ChildItem -Path $BuildDir -Recurse -Filter "*.json" | | |
| Where-Object { $_.Name -ne "compile_commands.json" } | | |
| Sort-Object Length -Descending | | |
| Select-Object -First 20 | | |
| ForEach-Object { "{0,8:F1} KB {1}" -f ($_.Length / 1024), $_.FullName } | |
| Write-Host "" | |
| Write-Host "ClangBuildAnalyzer report was generated: $Report" | |
Xet Storage Details
- Size:
- 3.82 kB
- Xet hash:
- 57b3db4a0f49ed58c2797f90e339564d572573d2378fe8f766e78f3eb37cdd36
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.