HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる

PC設定

ゲーミングPCを買ったので紹介します。

せっかくなのでベンチマークを行ってゲーム性能を見たりしたいです。

ベンチマークの結果をGNU Octaveで出力してみます。

測定に使用したMSI AfterburnerとRTSSとHWiNFOを紹介します。

PC買った

今までcore i5 8400にGTX1060の10万程度のPCを使っていましたがこの度ちょっといいやつに買い換えました。

なんとなくPCでも買うかという気分だったので。

という記録を残しておきます。どうせまた先5年とか買い換えないんだから

61800円。i5 8400が微妙でCPUはi7にしとこうと。
29980円。Z790で一番安いけど3万なら悪くないと思いたい。
99800円。3080これぐらいしか売ってなかった品薄。流行ゲーム軽いのばかりだし240HzモニターかVR無かったらオーバースペック感ある。
14100円。一か月くらい待ったらgskillsとかかなり安くなってたなど。
DDR5言われてるほど高くないと思いましたがDDR5対応のM/Bがとても高かったのでDDR4。
13480円と8080円。KIOXIA安い。
17980円。750Wでいいと思ったけど値段変わらんかったので850W。superflowerは安くていいらしい。
13730円。ドライブ付くやつで調べてなんか出てきたやつ。ドライブが下につくのいいね。
16800円。CPUクーラー品薄すぎる。これぐらいしかなかった
666円。なんかいいらしいgreaseでどれくらい変わるもんなのかしら。
15200円。今見たら安くなってるなあ。11は慣れ以前に使いづらいUIである。

できるだけ安いものを選びましたがそれでも30万円。高い。

ゲームとか重い作業とかしないんだったら8400に1060の旧PCでも何ら不満ないですからこりゃ仕事用かゲーム用かって感じがします。

最新FPSでも大抵1060で60FPSは出ますしね。快適かどうかは置いといて。

VRやらないんだったらいよいよ3080は使いこなせてない感があるし144から240とか360とかに買い換えたほうがいいなと思います。散財の連鎖です。

今見るといろいろ安くなってるし4070ti出てるし時期じゃなかった感がある。間が悪い。

外付けドライブ・内蔵ドライブの話

外付けドライブをすっと使用してきましたがあまり好ましくなかったです。

バスパワーは安定感にかけて不安だし、セルフパワーにするとUSBケーブルが2本生える羽目に。

ドライブ用スペースをデスクに用意したりしないのであればCDやBlu-ray使う人は内蔵にした方がいいと思います。

というか今回PC買うかという気分になった半分ぐらいは外付けドライブ怠いなというところから来てる気もします。

買ったのは7kの安いやつですが、内蔵ドライブもスペックとか考え始めるとパイオニアのやつとかこだわったりするんでしょうか、、、何が違うのか気になったりはします。

RTSSとHWiNFOのセットアップ

FPS測定用とOSD用にMSI AfterburnerとRTSSをインストールします。

MSI Afterburner 4.6.5 (ベータ 4) ダウンロード-Guru3D.com

MSI AfterburnerはRTSSを一緒にインストールします。

MSI Afterburnerを起動し設定(歯車)を開きます。

全般->Windowsと一緒に起動、最小化で起動にチェックを入れます。

オンスクリーンディスプレイ->ハードウェアのポーリング間隔で統計の更新間隔を入力します。ベンチマーク記録するときは間隔早めのほうがよさそう(HWiNFOと揃える)。

グラフ->フレームレートにチェック

 オンスクリーンディスプレイでの表示にもチェックを入れます。

設定を適用しMSI Afterburnerは最小化してしまいます。


RTSSを開きます。

Start with Windowsをオンにします。

Show On-Screen Displayをオンにします。

RTSSを最小化してしまいます。

これでゲーム画面にFPSが表示されるようになります。Geforce experienceとかゲームプラットフォームでオンにしてる?じゃあいらんな、、、


温度等測定用にHWiNFOをインストールします。

Download HWiNFO

センサーのみ使用するのでセンサーのみ表示にチェックを入れます。

センサー画面で項目設定を行えます。ベンチマークで測定したい項目を残します。

いらない項目を監視を無効にし消す

表示したいけどデータは取らなくていいものをログ無効にする

歯車から設定を行います。

レイアウト->センサー画面に表示する項目を整理できます(消した項目を戻したり)。

カスタマイズ->項目名を変更したりできます。

OSD->RTSSで一緒に表示したいものを設定できます。

センサー設定->ポーリング間隔を設定します。

 主な設定->自動起動と起動時最小化の設定を行います。


以上で設定完了です。統計の取得とゲーム画面への統計表示ができました。

設定は適当なので参考にならんかも。自動起動最小化しとくだけ

を押してログを開始し、ベンチマークを開始します。

ベンチマーク終了したらログを停止しcsvファイルが保存されます。

csvをじゃかじゃか保存しましょう。

GNU Octaveでcsvファイルを読み込んでグラフを出力する

octaveを使ったのは調べてたら出てきたからというだけですが、きっとpythonとか使えるようになっておいた方が役に立つのだろうなと思ったりします。matlabなんて一生使うことないだろうし。

GNU Octave-download

ダウンロードしインストールします。

matlabのコピーソフトらしいのでmatlabのコマンドが基本らしいです。

困ったらoctaveでなくてmatlabとつけて検索するか、matlabのサイトの検索欄で検索します。

matlab

octaveを起動しcsvのlogdataが保存されている場所に適当に.mファイルを保存してグラフを描くように書いていきます。

エディタのところにいろいろ書き込んでいきます。

左に変数に入力されたり計算された値が表示されています。変数名をクリックすると変数エディタのタブに詳細が表示されます。

コマンドウィンドウはコマンドウィンドウです。実行結果やエラーが表示されます。直接コマンドを打ち込むことができます。

使い方はそんな感じです。グラフ出しただけでそれ以外わかってません。なので対象はこれやる前の私みたいななんもわからん人と忘れたころに読み返してる私です。


グラフ出すやつ。

まずHWiNFOで出力されたcsvファイルの形式ですが、1列ごとに測定した項目が並んでいます。

ポーリングを0.1秒に設定しましたが実際はずれながら計測されているのがわかります。またパソコン時間での0,1秒なので使用タイマーによって実時間が変動したりします。

そこらへんも厳密に反映するべきなのでしょうがめんどくさいので0.1秒間隔である、としました。(文字列読み込むのめんどくさい)

これらのほしい項目を変数に突っ込んでグラフに出力します。

%がコメントアウトです。デフォルト ctrl+r <-> ctrl+shift+r です。

図を出力する部分を関数化しているので、一度関数の下から見たほうがわかりやすいかもしれません。

forの中にforが入りまくるのでぱっと見よくわからんですね

また関数化すると変数が関数の外に持ち出せず変数エディタであとから見れずデバッグしにくいので最後に関数化します。

%前回実行時の計算データを消しておきます。
%行列のサイズが固定されたりしてしまった。
clear all
%前回実行時の出力グラフを消しておきます。
close all

%プロットするコードを関数化しています。
%繰り返し実行するため
function  plotgraph(fname,lcolor,colnum,colname,line,xratio)

%読み込んだファイル数
%length:行列の長さ(ここではfnameにいくつのcsvファイルを読み込んだか)
  flength=length(fname);

%;をつけるとコマンドラインに結果を表示されません(実行が早い)
%;をつけなければ計算結果が表示されて変数の中身が確認できます。

%ファイル数だけ繰り返します
  for i=1:flength

%ログファイルごとに行列サイズ微妙に差が出るので繰り返しごとに行列をクリアする
    clear A B C

%csvの中身を読み込んでいきます。
%.name:ファイル情報の「ファイル名」を指定する
%dlmread:ファイル内の行列を読み込み(ここではファイル名という文字列)
%Aにファイル名を読み込みます。
    A = dlmread( fname(i).name );

%matlabの配列は 1 始まり
%必要なログデータの列をそれぞれ抜き出す(fps,cputemp,gputemp,・・・みたいな行列)

%:でその行や列全部を選択
    for j=1:length( colnum )
      B(:,j) = A(2:end-2,colnum(j):colnum(j));
    end

%ログデータの行数がいくつか入れる
    rownum=length(B);

%x軸ずれたとき用
    for h=1:rownum
      x(h)=h.*xratio;
    end

%開始オフセットを求める
    for j=1 : rownum
      if B(j,1) > 200
        start = j;
        break
      endif
    end

    for j=start : rownum
      if B(j,1) < 100
        start2 = j;
        break
      endif
    end
%fpsが200以上出た後にfpsが100以下に下がったところを開始地点とする

%終了オフセットを求める
    for j=1 : rownum +1
      if B(rownum -j,1) >61
        stop = rownum -j;
        break
      endif
    end
%fpsが最後に60以上出ていたところを終了地点とする

%必要なベンチマーク実行中の行を抜き出す(開始~終了まで)
  C = B(start2:stop,:);

%項目の数だけグラフを表示する
    for j=1:length( colnum )
      figure(j)

%軸ラベル
      ylabel( colname(j) )
      xlabel('0.1s')

%figureにグラフを表示
      graph=plot(x(1:stop-start2+1), C(:,j) );

%線の色を変える(ここではベンチマーク条件ごとに色を変えている)
      set(graph,'Color',lcolor)
%線の種類を変える
      set(graph,'LineStyle',line)
%グラフを上書き可能にする(hold offだと毎回消えてしまう)
      hold on
    end
%plot終わり
  end
%ファイル数分繰り返し終わり
end
%関数終わり


%拡張子含む対象ファイル名のリストを作成
%dir:「ファイルの情報」を読み込みます
fname_1 = dir('01-ff14-*.csv');
fname_2 = dir('02-ff14-*.csv');
fname_3 = dir('03-ff14-*.csv');
fname_4 = dir('04-ff14-*.csv');
fname_5 = dir('05-ff14-*.csv');
fname_6 = dir('06-ff14-*.csv');
fname_7 = dir('07-ff14-*.csv');

%読み込みたい項目列の配列を作る(csvの22列目のfps値を読み込む等)
colnum=[ 22 10 11 12 13 14];
colname={'fps' ,'cpuTemp' ,'cpuPower' ,'gpuTemp' , 'gpuPower' , 'gpuClock'};

%条件ごとに関数呼び出し
%条件ごとに色を変える
plotgraph(fname_1,'b',colnum,colname,":",1)
plotgraph(fname_2,'r',colnum,colname,":",1)
plotgraph(fname_3,'g',colnum,colname,":",1)
plotgraph(fname_4,'m',colnum,colname,":",1)
plotgraph(fname_5,'k',colnum,colname,":",1)
plotgraph(fname_6,'c',colnum,colname,":",1)
plotgraph(fname_7,'y',colnum,colname,":",1)

hold off

なんか見づらいのでコメントなしも載せときます


clear all
close all

function  plotgraph(fname,lcolor,colnum,colname,line,xratio)

  flength=length(fname);

  for i=1:flength

    clear A B C

    A = dlmread( fname(i).name );

    for j=1:length( colnum )
      B(:,j) = A(2:end-2,colnum(j):colnum(j));
    end

    rownum=length(B);

    for h=1:rownum
      x(h)=h.*xratio;
    end

    for j=1 : rownum
      if B(j,1) > 100
        start = j;
        break
      endif
    end

    for j=start : rownum
      if B(j,1) > 100
        start2 = j;
        break
      endif
    end

    for j=1 : rownum +1
      if B(rownum -j,1) >61
        stop = rownum -j;
        break
      endif
    end

  C = B(start2:stop,:);

    for j=1:length( colnum )
      figure(j)

      ylabel( colname(j) )
      xlabel('0.1s')

      graph=plot(x(1:stop-start2+1), C(:,j) );

      set(graph,'Color',lcolor)

      set(graph,'LineStyle',line)

      hold on
    end
  end
end

fname_1 = dir('01-ff14-*.csv');
fname_2 = dir('02-ff14-*.csv');
fname_3 = dir('03-ff14-*.csv');
fname_4 = dir('04-ff14-*.csv');
fname_5 = dir('05-ff14-*.csv');
fname_6 = dir('06-ff14-*.csv');
fname_7 = dir('07-ff14-*.csv');

colnum=[ 22 10 11 12 13 14];
colname={'fps' ,'cpuTemp' ,'cpuPower' ,'gpuTemp' , 'gpuPower' , 'gpuClock'};

plotgraph(fname_1,'b',colnum,colname,":",1)
plotgraph(fname_2,'r',colnum,colname,":",1)
plotgraph(fname_3,'g',colnum,colname,":",1)
plotgraph(fname_4,'m',colnum,colname,":",1)
plotgraph(fname_5,'k',colnum,colname,":",1)
plotgraph(fname_6,'c',colnum,colname,":",1)
plotgraph(fname_7,'y',colnum,colname,":",1)

hold off

実行してみます。グラフが出てきました(これは2条件のみですが)

FPS値のグラフをコマンドラインに軸の範囲等打ち込んで成形してみました。

おまけ ベンチマーク結果

こちらRTX3080の電力制限をかけてベンチマークを回した結果です。

横軸が電力制限、縦軸がscore fpsです。(fps値も比較しようとしましたがscoreとほぼ一致しているのを見て途中でやめました)

ゲーム中ずっと300W食われ続けるのもあほくさいし80%ぐらいに制限かけてもいいのかなと思います。scoreやclockの降下幅は5%程度ですし、どうせ最近の軽いゲームだとfpsは十分出ますから。

CPU13700KFは電力制限するまでもなく100W程度しかゲーム中消費せず、PL1をそれ以上に設定しておくだけでよさそうです。またFPS値はHTを切ったほうが明らかに高く出ました。

おわり

これでベンチマークの結果を比較することができるようになりました。

やってることは所詮excelの自動化ですがexcelは有料で高いのだなあ。

こんなことしなくてももっと簡単な方法もありそうだけどどうなんでしょうか

次の記事:メモリタイミング等のDRAM設定を行ってみる


コメント

タイトルとURLをコピーしました