- Home
- 一覧
- 雑記
-
[PC設定]メモリタイミング等のDRAM設定を行ってみる
先日購入したゲーミングPCのメモリタイミングを調整してみて、メモリ設定によってゲーム性能が上がるのか見てみます。
ゲーム性能の指標としてはベンチマークのスコアとその際のFPS値を使用します。
またメモリの設定を行うにあたり調べ学習をしました。それらを引用しまくったメモを張り付けます。
実際に行ったのはメモリOCではないです(1.35VもOCっちゃOCなのだろうけど)。タイミング調整のみです。
参考資料
参考というかパクリ元です。ここら辺を読んで、ちょろっとまとめたメモを作成しました。
なのでここよりこっちを見るとよいと思いますよ。
メモリOC・タイミング調整
ハリフーン (hurriphoon)さんのゆっくり解説動画。動画なので気楽にメモリのタイミング調整について学べます。今回のFPS値検証はハリフーンさんの結果を再現させているだけではあります。
ゲーム向けのメモリ設定の最適化・選び方について述べられています。
メモリの設定手順について解説しています。大体これに従って設定してみています。
諸タイミングが何を指しているか等、メモリ設定を解説しています。
仮想メモリ・レジストリ
メモリ関連のレジストリ公式ドキュメント
メモリ関連のレジストリについてまとめられています。
DRAMのしくみ
メモリって何?なざっくりとした読み物です
メモリの仕組みからタイミングとは何か解説しています
メモリについてデジタルな話をしています。
- https://www.micron.com/-/media/client/global/documents/products/technical-note/dram/tned03_gddr6.pdf
micronのテクニカルノートで検索すると専門的な話をしたものがいろいろあります。
安定性テスト
不安定な設定だと完走できずに落ちることがあるので簡単なテストに使えます
高い負荷をメモリに長時間かけエラーが出ないかテストします。
ほかにもいろいろあるぽいけど一杯やるのめんどくさいしいいかになってしまった
メモリタイミングと設定方法等
上記参考資料をパクって自分用にまとめたのです。
値の設定はBiosで行います。PCを起動したらF2を押しDRAMの設定を行います。
不明な単語は上記参考資料見たりすればいいのではないだろうか
安定性
条件を厳しくしていき動作が不安定にならないところに決定します。
安定して動作する中での最良の条件を見つけます。
下記手順ごとにOSが起動したらベンチマークを回し安定性をテストする。
簡易的に安定性を見る。不安定だと落ちる。
- cinebench r23 multi
- FF15bench
条件が固まってきたらprime95で長時間高負荷時の安定性を見る。
メモリ情報の確認
Thaiphoon Burnerで見れるらしい(環境では動作しなかった)
biosでinfomationから一部確認することができる
ダイの種類で詰めやすさが変わるらしい
シングルランクよりデュアルランクのほうが高速らしい
Voltage
標準は1.2V、XMP適用で1.35Vのものが多いと思います。
~1.5VはOCと言ってよいのではないでしょうか(1.35VもOCではあるのでしょうけど)
GEAR MODE
メモリコントローラのクロックを決定します。GEARMODE1はDRAMと同じクロックで動作し、2は半分で動作するようです。
ますGEARMODE1にします。
Clock
言うまでもないですがクロックが高いほうが高速で動作します。
タイミングAutoでクロックを上げていき起動しなくなる周波数を探り、使用するクロックを決定します。
timing
タイミングの実時間速さは何クロック使用するか、であるのでクロックの高さに依存します。
primary timing
- tCL
CAS latency (Column Address Strobe)
アクティブ化した行でアクティブ化した要求列のアドレスを読み込みデータを取得するまでの時間
tCLを不安定になるまで下げていき値を決定し設定します。 サイクル実時間は下記から求められます $$\sf{timing}\ast\frac{2000}{clock} [ns]$$ - tRCD
Row to Column Delay
行をアクティブ化した後、列をアクティブにするまでの時間
行アクティブ後列データ読み込みまでにかかる時間はtCL+tRCD
- tRP
Row Precharge Time
プリチャージ=非アクティブ化してから次の読み込み行をアクティブ化するまでの時間
読み取り後、非アクティブにし次の列アドレスをアクティブしようとするまでの時間
tRCD, tRPを同値で不安定になるまで下げていき値を決定し設定します。 - tRAS
Row Active Time
行をアクティブ化してから非アクティブまでの、行がアクティブである最小時間
通常tCL+tRP tRAS=tCL+tRPを最小値として設定し不安定なら上げていき値を決定し設定します。 - CR
Command Rate
コマンド送信回数。少ないほうが高速だが、複数回コマンドを送信すれが当然エラー率は下がる
クロックが割と高くなければ1で通るらしい
1から設定し、不安定なら上げ値を決定し設定します。 secondary timing
- tWR
Write Recovery Time
書き込み回復時間
書き込み終了後にバンクが非アクティブ化されるまでの時間
- tRTP
Read to Precharge Delay
読み取りから非アクティブ化までの時間
tWR=2*tRTPとなります tWR tRTP safe 20 10 tight 16 8 extreme 12 6 - tRRD_S
RAS to RAS Delay Different Bank Group
異なるバンクへグループの遅延時間。メモリは複数のバンクおよびバンクグループがある
RRDS分だけ待機する
- tRRD_L
RAS to RAS Delay Same Bank Group
- tFAW
Four Activate Window
同ランク内で4つの行のアクティブ化が発生できる時間
tRRDS tRRDL tFAW safe 6 6 24 tight 4 6 16 extreme 4 4 16 - tRFC
Refresh Cycle Time
メモリは一定期間でリフレッシュが入る。リフレッシュにかかる時間なので短いほど良い
周囲温度が高いときつくなるためややマージンを持つとよいかも
下記表のとおりに加減も決まってるようで台に応じて徐々に下げていくとよい $$\sf{tRFC timing}=\sf{tRFC[ns]}\ast\frac{clock}{2000}$$ IC tRFC (ns) S8B 120 – 180 N8B 150 – 170 H8D 240 – 260 H8A、H8C 260 – 280 M8E、M16B 280 – 310 S8C 300 – 340 - tCWL
CAS Write Latency
CASの書き込み版。列アクティブから書き込みまでの時間
tCWL1 safe tCL tight TCL-1 extreme TCL-2 tCWL を変更すると tWRRD_dg/sg に影響し、したがって tWTR_S/L に影響します。 tCWL を 1 下げる場合、同じ tWTR 値を維持するには、tWRRD_dg/sg を 1 下げる必要があります - tWTR_S
Write to Read Delay Different Bank Group
異なるバンクグループでの書き込みから読み込みまでの待機時間
- tWTR_L
Write to Read Delay Same Bank Group
tWTRS tWTRL safe 4 12 tight 4 10 extreme 4 8 tWTRS/L を auto のままにし、それぞれ tWRRD_dg/sg で制御する必要があります。 tWRRD_dg/sg を 1 下げると、tWTRS が 1 下がります。 tWRRD_sg も同様です。可能な限り低くなったら、tWTRS/L を手動で設定します tCWL→tWRRD→tWTRの順に設定 third timing
- tREFI
リフレッシュを行う間隔。リフレッシュ中は動作できないため間隔は長いほどよい
周囲温度が高いときつくなるためややマージンを持つとよいかも
tREFI safe 32768 tight 4000 extreme 65534 - tCKE
Clock Enable Time
- tRC
Row Cycle Time
RASは行がアクティブにされてから非アクティブにするまでの時間、
RPが非アクティブにされてから次の行をアクティブにするまでの時間
よって最小値は tRAS + tRP
tRAS+tRPを最小値として不安定なら増やす turn around timing
- tRDWR
Read Write Command Spacing
読み取りコマンド後書き込みコマンドまでの間隔
- tWRRD
Write Read Command Spacing
書き込みコマンド後読み取りコマンドまでの間隔
- tRDRD
- tWRWR
tRDRD sg dg d r dd safe 8 4 8 8 tight 7 4 7 7 extreme 6 4 6 6 tWRWR sg dg dr dd safe 8 4 8 8 tight 7 4 7 7 extreme 6 4 6 6 tWRRD_sg/dgは上記参照 tRDWRは9/9/9/9 のような感じで1ずつ下げていきます drはデュアルランクに関するもので、シングルランクでは無視できます。 メモリ設定の違いによるFPS値の変化
前回(HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる)作成したものを使用してベンチマーク中のFPS値を測定します。
使用するメモリはこちらです。XMP 3600MHz
Patriot Viper Steel DDR4 3600MHz 16GB x 2枚
余談ですがこのメモリXMPを適用するとやや不安定で、たまに落ちます。あまり良い個体を引けなかったようです。
XMP運用できません。最初からタイミング調整するつもりだったとはいえ設定されてるんだから動いてくれよなんですけど。XMPとの比較はできません。無意味では?
というわけでそもそもの目的としてOCして限界に挑むとかでなく1.35V3600MHzで安定動作する設定を探すという風です。
ついでに設定の差によるFPS値やスコアの変動も見てみます。
使用ベンチマーク
7zipベンチマークcompression
3D Mark Timespy
ff14ベンチマーク
条件
それぞれの条件で安定動作したものを使用しています。
clock MHz
- 2666(SPD)
- 3200
- 3400
- 3600
timing
- 自動
- 一次のみ
- その他も
結果
スコア
- 7zip comp
タイミングを設定するごとにスコアが上昇しています。一次のみで見てみると3200MHzがなんかスコア高いですね。
一次タイミング以降を設定するとスコアがめちゃくちゃ伸びています。
ゲームにおいてここまで差がつくかといわれるとですが、一次以降のタイミングも重要であることはわかります。
- timespy physics
こちらも同様の傾向です。
2666MHzとの差が大きく見え、クロックが高いほうが性能がよさそうです。
- ff14
ff14は一次タイミングでの伸びと+一次以降との伸びが同じくらいです。
fps
ff14の結果から
- 2666auto VS 3600 all
拡大しないと見づらいですが、どこの地点でも20fps程度の差があります。
SPDとの比較ですが、2666等の一番安いものを買うのと数千円盛って安いOCメモリを買うのとでこれぐらいの差がある感じでしょうか。
- 3200all VS 3400all VS 3600all
拡大しないと見えない。
3200と3400と3600とでそれぞれ調整しましたが、周波数は高いほうがFPSがちょっと高いです。
3200→3400の伸びは目に見えますが、3400→3600の伸びはそれに比べるとかなり小さいです。
- 3600 auto VS primary VS all
自動→一次のみ、一次のみ→全部 でそれぞれ10fps程度伸びています。
まとめと調整した感想
タイミングを手動調整することで、ちゃんとFPSが向上することがわかりました。
何よりBiosやメモリ設定をいじるという食わず嫌いがなくなるのがよいと思います。こうでもしなきゃめんどくさくて触ろうとすることなかったでしょうからね。
あとちゃんとOCメモリを安定させられるというのが性能面よりも大きいですよね
下記調べながら等環境でメモリを設定してみた結果です記録用。ちゃんとできてるのかは知らないけど。
Gear 1 tCL 19 tRCD 21 tRP 21 CR 1 tWR 12 tRFC 549 tRRD_L 6 tRRD_S 4 tWTR_L 6 tWTR_S 4 tRTP 6 tFAW 16 tCWL 17 tREFE 65534 tCKE 4 tRC 61 tRDRD_sg 7 tRDRD_dg 4 tRDRD_dr 7 tRDRDdd 7 tRDWR_sg 12 tRDWR_dg 12 tRDWR_dr 14 tRDWR_dd 14 tWRRD_sg 29 tWRRD_dg 27 tWRRD_dr 10 tWRRD_dd 10 tWRWR_sg 8 tWRWR_dg 4 tWRWR_dr 8 tWRWR_dd 8 仮想メモリとレジストリ
レジストリ
参考資料のところで示しましたが
あたりを読んだり試してみたりしました。
これらレジストリ自体古くて機能していないものも多いようです。
Microsoftに高スぺの場合カーネルを物理メモリに常駐させるようレジストリをいじると性能が上がる可能性があると書いてあったりします。
インターネットでも見てるとレジストリからメモリの最適化できますというのはいっぱい出てきます。
まあ等環境では目に見えたfps向上などの変化は見られませんでしたので、わざわざレジストリをいじる必要性は感じられませんでした。とりあえずデフォルト推奨です。(そのうち要検証?)
ソフトウェアなどによって勝手にレジストリが変更されている、ということがあるというのも見ましたので、そういう場合は元に戻しておくのがよいかな。
仮想メモリ
仮想メモリもレジストリから編集することはできますがパフォーマンスオプションから設定することができます。
win+rからSystemPropertiesPerformanceを実行するか、ショートカットを作っておきましょう。
パフォーマンスオプション>詳細設定>仮想メモリ
仮想メモリのオンオフや割当量を設定することができます。
メモリ量が十分であれば仮想メモリをオフにする方がよい、ということも聞きますがどうなのでしょうか。fps値向上等の目に見えた変化は見られませんでした。好きな方でよさそう。仮想メモリ割り当てないと不安定になるゲームもあるとか聞いたことがあります。
確かに計算機等の基本的な本等に書いてある理屈の上では仮想メモリのデータにアクセスする際遅延が発生しそうですが、そのレベルが実際に影響を及ぼすのかは疑問です。逆に物理メモリのスペースを空けることで良い効果もあるとか。(そのうち要検証?なんかどうでもよさそう)
おわり
メモリタイミングを調整することで10程度規模のfps差が生じました。大きいか小さいかはちょっとの値段の差をどう捉えるか人それぞれでしょうか。
おすすめのメモリの買い方は自分で設定したくない人はネイティブ3200を買う。ちょっと安いし。OCメモリならXMP当てずにタイミングを手動設定する。です
ただ今回調整する中でBiosも立ち上がらなくなったのがありました(片方のメモリを抜き原因のタイミングを再設定し対処。ダメだったとしてもCMOSクリアすれば大丈夫かな?)。なのでまあなにかしらのリスクはあることは想定してやるべきなのだなあ。
……めんどくさいしネイティブでよくね?ちょっと安いし。
XMPは不安定だったのでゴミです。どこを見てもOCメモリが当たり前におすすめされててなんだかなあと思ったりしました。不安定なことはまれなのだろうか?それでも不安定な可能性を孕んでいるよなあ……など。
何より今回はメモリに関する知識が多少身についたことと、メモリタイミングの設定を実際に行ってみた経験が収穫です。
前回:HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる
次の記事:Windows11インストール後の初期設定(MS-settings)
-
USBハブは接続機器の入力遅延を引き起こすか?
USBハブにマウス等のゲーミングデバイスを接続したときに、直接USBポートに接続するより良くないのではないか?と考えたことはあるでしょうか。
特に違和感を感じたことがないからとUSBハブを使用している人も、良くないと聞いたから良くなさそうだからと使用していない人も、特に何も気にしたことがない人もいると思います。
USBポートをデスク上に引っ張ってこれるのは単純に便利です。
複数マウスを使用する場合いちいち接続しなおすのもめんどくさいです。
でも接続していいのか?ちょっと気になったりもします。
実際にUSBハブはどうなのか?を雑検証してみたいと思います。
検証方法
詳細については下記の記事を参照してみてください。
そこから派生しているというかめんどくさくて放置していた雑ネタです。
前回はマウスとpromicro(qmkによる自作キーボード的なもの)を接続してマウスの遅延を検証する方法を紹介しました。
今回はそれを2つ用意してUSBに直接接続したりハブにつないだりして比較してみます。
仕組みとしてはスイッチを押すと左クリックを入力する装置となっています。
それらが同じスイッチに接続されているため、2つの機器が同時にクリックを行うことができます。
カチカチしているのをdualモードのmousetesterのインターバルグラフで観測し、その入力タイミングポーリングタイミングで比較を行います。
使用するUSBハブはなんかエレコムのやつです。特に選定理由に意味はなく部屋にあったから。またほかのUSBハブを所有していないため、他製品では結果が異なることがあります。
条件
①両方ともUSBに直接接続し比較を行います。
刺し直したり、ポートを交換したりしてまあ有意な差がないことを確かめます。
②片方をUSBハブに接続してUSB接続と比較を行います。
こちらも両者交換したり刺し直したりします。この時ハブには他に何も接続していません。
③2番にプラスして、ハブにトラックボールを接続しボールをころころしながら測ったりウェブカメラを接続し映像を送信しながら測ったりしました。トラボとウェブカメなのは手の届くところに転がってたからです。
その他は試したいないためどうなるかわかりません
結果
結果のデバイス1(青)とデバイス2(緑)の関係は統一されています。
USB接続同士
どれがどういった条件かはまあいいでしょう(雑)。
とりあえずUSB接続同士だとポーリング間隔に~0.05ms程度私の環境だとありました、ということにします。
②USB vs USBハブ(promicroのみ)
どれもUSBハブが0.1ms程度遅れていることがわかります。
③USB vs USBハブ(+トラボ、ウェブカメ)
名前変え忘れてますがまあトラボとウェブカメがつながってます。
ハブにほかの機器を接続してもpromicroのみでも入力遅延の様子は変わらず0.1ms程度であることがわかります。
まとめ
今回の検証においては、USBハブは0.05ms程度USB接続よりも入力遅延があることがわかりました。
またUSBハブにほかの機器を接続してもその結果は変わりませんでした。
まあUSBのデータ転送速度を考えればいくつつないでも送信できるかと思えます。差が0.05msということは単純にワンテンポポーリングが遅れているとかではなさそうです。
通信方式がHIDデバイスとは何か違ったりするのでしょうか。(何も知識がないです。)
単純に結果だけを見ると、
USBハブに遅延はない!という主張や、USBハブは遅延するから使うな!という主張はどちらも誤りであるように思います。
遅延は確かにあるため直接USB接続するに越したことないが、0.05ms程度であるため神経質になるほどではない(無線マウスの遅延のほうがはるかに大きいため無線マウス使用時は無視できる)。と適当にまとめます。
元も子もないっちゃ元も子もないです。
バスパワーの不安定さとかUSB多すぎとかのほうが気にしたいところ。
今回の検証はすべてが適当であり、鵜吞みにされると責任持てないしそれホントかよと言われたらいやあ……であります。気になったらやり方は全部投げられているのでやってみてください。
検証したのはクリック(on,offのみの2値単発信号)でありマウスセンサーとか継続してアナログな感じのデータ送信したときどうか?はこれだとわかりませんし。変わらんやろと勝手に思ってるけど。
終始適当でしたがそんな時間かけてやろうとも思えなかったのでとりあえず雑に検証してみました。
そのうち何か詳しく検証する機会があったらこれもやろうとは思いますが。
私はUSBハブに1msとか遅延があるのかな?と勝手に思っていたので収穫です。(いままでハブにマウスをつなぐ機会がなかったので放置してました)
入力遅延の検証関連:[マウス]クリックとセンサーの入力遅延を測定してみる
promicroで検証関連:[計算機]VALORANTの感度と視野角の仕様を調べてみた
-
HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる
ゲーミング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クーラー品薄すぎる。これぐらいしかなかった grease シミオシ OC Master 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をインストールします。
センサーのみ使用するのでセンサーのみ表示にチェックを入れます。
センサー画面で項目設定を行えます。ベンチマークで測定したい項目を残します。
いらない項目を監視を無効にし消す
表示したいけどデータは取らなくていいものをログ無効にする
歯車から設定を行います。
レイアウト->センサー画面に表示する項目を整理できます(消した項目を戻したり)。
カスタマイズ->項目名を変更したりできます。
OSD->RTSSで一緒に表示したいものを設定できます。
センサー設定->ポーリング間隔を設定します。
主な設定->自動起動と起動時最小化の設定を行います。
以上で設定完了です。統計の取得とゲーム画面への統計表示ができました。
設定は適当なので参考にならんかも。自動起動最小化しとくだけ
を押してログを開始し、ベンチマークを開始します。
ベンチマーク終了したらログを停止しcsvファイルが保存されます。
csvをじゃかじゃか保存しましょう。
GNU Octaveでcsvファイルを読み込んでグラフを出力する
octaveを使ったのは調べてたら出てきたからというだけですが、きっとpythonとか使えるようになっておいた方が役に立つのだろうなと思ったりします。matlabなんて一生使うことないだろうし。
ダウンロードしインストールします。
matlabのコピーソフトらしいのでmatlabのコマンドが基本らしいです。
困ったらoctaveでなくて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は有料で高いのだなあ。
こんなことしなくてももっと簡単な方法もありそうだけどどうなんでしょうか
-
[デスク]FPS向けのゲーミングアームレストを作る
Steelcase のオフィスチェア Leap v2 に対応したゲーミングアームレストを3DPで作りました。
使われないがちなアームレストをカスタムし、有効活用することができるようになりました。
ゲーミングアームレストってなんだよ
いわゆるゲーミングチェアってやつはごっついアームレストがついています。
そのアームレストに腕を載せ、ゲームプレイ中に有効活用している人はどれだけいるのでしょうか。
後傾姿勢でプレイする方やハイセンシの方はアームレストに腕を載せているかもしれません。
しかしそうでない人は、アームレストを下げ、腕をデスク・マウスパッドに乗せるスタイルが一般的なのではないでしょうか。
つまりゲーミングチェアはゲーミングを謳っているにもかかわらず、ゲームに不適なものを搭載してしまっているということです。
このスタイルで問題はないのですが、ベストでもないと考えます。というのが今回の話題です。
1つ目に、普段使いとのギャップです。
ゲームプレイ時に腕を大きく載せるということは普段使いするときより体を前に乗り出して座るということです。マウスやキーボードの位置は奥に置きなおさなくてはなりませんし、モニターに近づきます(モニターが近いのが良いという人もいるでしょうけど)。
2つ目に、デスク・マウスパッドの奥行きです。
乗り出している分、マウスパッドとデスクの奥側にマウスを位置取ることになります。これはそうでないときと比べて奥行きが10~20センチ多く必要になります。
マウスパッドがそれだけ大きなものが必要になりますし、狭いデスクではぎりぎりに、広いデスクでは奥のスペースを有効活用できなくなります。
つまりマウスを滑らせない手前のスペース、腕載せてる部分無駄じゃんということです。
3つ目に、せっかくついているアームレストをゲームプレイ時にどけるために下げなくてはならないことです。
ゲーム時には下げ、普段使いでは上げる方もいるのではないでしょうか。めんどくさいです。
しかし、アームレストをデスクの高さまで上げると、ゲームがしづらいという問題が発生します。
というのは、腕が載せられるのは良いのですが肘まで乗ってしまうということが問題となります。
肘がアームレストに乗ると、非常にエイムし辛く感じます。ひじの骨のあたりがいづいですよね。
アームレストをゲームプレイで使用しない主な理由がこれだと思っています。
よってこのような形状にすることで肘を開放してやればよいですよねという安直な考えを3DPで印刷して実現してみました。
ゲーミングアームレスト
以前 椅子キ を制作したときのアームレストモデルを流用し適当に作ってみました。
[自キ] えむごっち & panda_micro でキーボードを無線化し椅子キー環境を試作してみた (tsuiha.com)
10センチ程度腕が乗るようになっており、手前側は肘がフリーにできるスペースとなっています。
裏は狭い部分のサポート材を剥がすのに汚くなってしまいましたが、すべすべでPLAこのままでも全然使えそうな質感です。
カッターでバリをとるだけでいい感じ
左手側のキー操作では肘を自由にする意味はないので、椅子キ で制作した傾斜の付いたアームレストをそのまま使います。
いい感じです
スチールケース(Steelcase) オフィスチェア Leap リープアームレストを使いながら肘を自由にしエイムのしやすい環境になりました。
またこれによって奥行き45センチのコンパクトなデスクでも狭いと感じることなくマウスを大きく振ることができるようになりました。空間コスパ高いです
普段使いとゲームプレイ時でアームレストをいじる必要がなく、無駄がなくなりました。
おわり
今回作ったモデルはgithubに投げてあります。3DP/gaming_armrest at main · Tsuiha/3DP (github.com)
安直な案ではありますがいいものが手に入ったと感じます。
とりあえず思いついたまま実行してみました。またここから理解度を深めステップアップしていけたらよいと思います。
次の記事:省スペースなアングル・スライドPCデスクを自作する
-
「巻き取り式USBケーブル」でデスク上をスッキリ&取り回し良く
デスク上においてキーボードのケーブルは動かさないにしても動かすにしても割と邪魔なものです。
またデスク上をずらしたり、引いたり、押したり、移動させることを考えるとケーブル長には余裕がなければなりません。
すると余っているケーブルはデスク上を占有します。コイルケーブルを利用すればケーブルが暴れることはないですがコイル部分によって動かし方が制限されると感じます。
柔らかいものやコイルケーブル等試してきて、今のところ巻き取り式ケーブルに落ち着いているので、気に入っている製品を紹介します。
使ってる感じ
デスクまで適当な長さのUSB延長ケーブルで引っ張ってきて、デスク上にリールコードを配置しています。
押したり引いたりしても煩わしくありません。
FPS等のゲームでキーボードと別に左手デバイスを利用する際にも移動しやすいです
良さげなやつ
紹介するのはケーブル長70cmのコンパクトな巻き取り式ケーブルです。
コンパクトなものが無かったら巻き取り式も微妙でした。
micro-USBはエレコム、type-cはホワイトナッツのものです。販売元は異なりますがモノとしては同じOEMと思われます。
直径28mm程度でコンパクトです。
ほかの巻き取り式ケーブルと比較するとサイズの小ささが分かります。
また端子の向きが置いたときに水平で、キーボード等に接続した際にねじれません。
引き出し量が多いと丸まってしまいます。
まだ断線はしていませんが、根元の耐久性が不安に思えるのでシリコン系で補強しようかなと思います。
おわり
自作キーボード系などではtrsでもusbでもリール式の使用例は多そう。
デスク系デバイス系の面で見てもすっきりコンパクトに収まり優秀だなと感じます。見た目にこだわる人には向いてないかもしれません。
この70cmのタイプの製品が探した中では最も小さくて端子の向きもよく、根元がやや不安ですがよいと思っています。