hyousi

  • 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 2010
    tight 168
    extreme 126
    • 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
    safe6624
    tight4616
    extreme 4416
    • tRFC

    Refresh Cycle Time

    メモリは一定期間でリフレッシュが入る。リフレッシュにかかる時間なので短いほど良い

    周囲温度が高いときつくなるためややマージンを持つとよいかも

    下記表のとおりに加減も決まってるようで台に応じて徐々に下げていくとよい
    $$\sf{tRFC timing}=\sf{tRFC[ns]}\ast\frac{clock}{2000}$$
    IC tRFC (ns)
    S8B120 – 180
    N8B150 – 170
    H8D240 – 260
    H8A、H8C260 – 280
    M8E、M16B 280 – 310
    S8C300 – 340
    • tCWL

    CAS Write Latency

    CASの書き込み版。列アクティブから書き込みまでの時間

    tCWL1
    safetCL
    tightTCL-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
    safe412
    tight410
    extreme 48
    tWTRS/L を auto のままにし、それぞれ tWRRD_dg/sg で制御する必要があります。
    tWRRD_dg/sg を 1 下げると、tWTRS が 1 下がります。
    tWRRD_sg も同様です。可能な限り低くなったら、tWTRS/L を手動で設定します
    tCWL→tWRRD→tWTRの順に設定

    third timing

    • tREFI

    リフレッシュを行う間隔。リフレッシュ中は動作できないため間隔は長いほどよい

    周囲温度が高いときつくなるためややマージンを持つとよいかも

    tREFI
    safe32768
    tight4000
    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
    safe8488
    tight7477
    extreme 6466
    tWRWR
    sgdgdrdd
    safe8488
    tight7477
    extreme6466
    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メモリを安定させられるというのが性能面よりも大きいですよね

    下記調べながら等環境でメモリを設定してみた結果です記録用。ちゃんとできてるのかは知らないけど。

    Gear1
    tCL19
    tRCD21
    tRP21
    CR1
    tWR12
    tRFC549
    tRRD_L6
    tRRD_S4
    tWTR_L6
    tWTR_S4
    tRTP6
    tFAW16
    tCWL17
    tREFE65534
    tCKE4
    tRC61
    tRDRD_sg7
    tRDRD_dg4
    tRDRD_dr7
    tRDRDdd7
    tRDWR_sg12
    tRDWR_dg12
    tRDWR_dr14
    tRDWR_dd14
    tWRRD_sg29
    tWRRD_dg27
    tWRRD_dr10
    tWRRD_dd10
    tWRWR_sg8
    tWRWR_dg4
    tWRWR_dr8
    tWRWR_dd8

    仮想メモリとレジストリ

    レジストリ

    参考資料のところで示しましたが

    あたりを読んだり試してみたりしました。

    これらレジストリ自体古くて機能していないものも多いようです。

    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クーラー品薄すぎる。これぐらいしかなかった
    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設定を行ってみる


  • [デスク]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のタイプの製品が探した中では最も小さくて端子の向きもよく、根元がやや不安ですがよいと思っています。