<#
.SYNOPSIS
GPUログを取得する。
.DESCRIPTION
アプリケーション実行において観測が必要な最低限のログを取得します。
.PARAMETER duration
データ取得間隔を記載します。(単位は秒)
.PARAMETER out
ファイル出力する場合のファイルパスを記載します。
設定されない場合は、コンソールに出力します。
.INPUTS
None. This script does not correspond.
.OUTPUTS
System.Int32
If success, this script returns 0, otherwise -1.
.EXAMPLE
.\nvidia-smi_proc.ps1
ログデータをコンソールに出力します
.EXAMPLE
.\nvidia-smi_proc.ps1 -out hoge.csv
データをhoge.csvに出力します。
#>
[CmdletBinding(
SupportsShouldProcess=$true,
ConfirmImpact="Medium"
)]
Param(
$duration = 1,
$out = ''
)
$EXE = "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"
$LOG_ITEM = @(
'timestamp',
'gpu_bus_id',
'gpu_name',
'utilization.gpu',
'utilization.memory',
'memory.total',
'memory.free',
'memory.used'
)
$outfile = @()
if ($out -Ne '') {
if ((Test-Path $out) -Eq $True) {
$overwrite = Read-Host -Prompt "Output file exist: ${out}. overwrite?(y/n)"
if ($overwrite -Ne 'y') {
exit 0
}
}
$outfile = @('-f', $out)
}
$LOG_QUERY = "--query-gpu=$($LOG_ITEM -Join ',')"
$LOG_FORMAT = "--format=csv,nounits"
$LOG_DURATION = @('-l', ${duration})
& $EXE ${LOG_QUERY} ${LOG_FORMAT} ${LOG_DURATION} ${outfile}
exit 0