ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

Upload Labs 攻略 (終盤戦)

Steamsで遊べる無料ゲー「Upload Labs」でシステムレベル24になって次レベルまで数週間かかる見込みとなり、色んな最適化もやりきった気分になった。なので最後に攻略記事を書いてみる。ただし、プレイ開始~中盤については多数の方が攻略記事を執筆済みなので、ここでは中盤~終盤の攻略記事を書くことにする。

注:本記事はVer. 1.1.6のときのものである。

■Steams:

store.steampowered.com

■Upload Labsとは:

automaton-media.com

  • ハッキング
    • 構成
    • ハッキングアップグレード
    • 脅威レベル
    • データ侵入アップグレード
  • コーディング
    • 全体構成
    • ドライバコーディング
    • アプリケーションコーディング
    • 最適化コーディング
  • リサーチ・トロイの木馬
  • 開始時用ダウンローダ・AIトレイナー
    • 構成
  • ストレージ
    • 構成
    • ゲームジェネレータおよび3段圧縮
    • 6種類のファイルを均等生成
    • ストレージの状態
  • AGI
  • 小技
  • 執筆時の状態

 

続きを読む

さつきまつり2025

今更だけど、2025年のさつきまつり情報。

  • 去年と同様に、構内撮影はOKだがSNS等への写真投稿はNG。
  • 開催日時は去年と同様に6月の第1土曜日である6/7 10:00 - 14:00。開場は9:45。
  • バス時刻表は以下の通り。
    • 勝田駅西口発:09:45, 10:15, 10:45, 11:15, 11:45
    • 構内発:12:45, 13:15, 13:45, 14:15, 14:45
  • 今回は機関車へのヘッドマーク掲示なし。
  • G1タワー見学がVR見学に変更。
  • VR作業安全体験、金属模型組立を新設。
  • 新館そばの山側グラウンドにあったステージは日立側門へ縮小移転。
  • 去年はミャクミャク様が来臨したが、ことしはいらっしゃらなかった。本業が忙しいのだろう。
  • 屋台は10:00~11:00ぐらいの時間のほうが割引されてたりした。

さつきまつり2025 チラシ(表)

さつきまつり2025 チラシ(裏)

 

ロマンシング・サガ2 追憶の迷宮の全マップ (青の迷宮 緑の迷宮 赤の迷宮 黒の迷宮)

自分のメモがてら、ロマンシング・サガ2 追憶の迷宮の全マップを画像化した。最短ルートの検討などにどうぞ。黄の迷宮は後日。

 

  • 黒の迷宮 (紫のオーブ)
  • 青の迷宮
  • 緑の迷宮
  • 赤の迷宮
続きを読む

VCPkgおよびC++REST導入メモ

新しい環境でC++RESTを使うことになったので、C++RESTおよびそのために必要なVCPkgの導入方法をメモ。

  1. GithubよりVCPkgのソースコードをダウンロード。

    github.com

  2. 中身をsource/repos/vcpkgに展開する。
  3. コマンドプロンプトまたはPowerShellを起動し上記フォルダに移動する。
  4. bootstrap-vcpkg.batを実行する。
  5. 以下を実行する。
    vcpkg.exe integrate install
  6. Windowsの「システムの詳細設定」より、環境変数:VCPKG_ROOTを追加する。値はvcpkg.exeのある、上記フォルダのパス。
  7. 同様に、pathにVCPKG_ROOTを追加する。
  8. コマンドプロンプト/power shellを立ち上げなおして、source/reposに移動する。
  9. 以下を実行する。
    vcpkg install cpprestsdk:x64-windows
    すると、必要に応じ、CMakeや7zip, 7zr, git, power shellのコードがダウンロードされ、ビルド・インストールされる。
    また、c++RESTに必要なbrotliデータ圧縮ライブラリのコードやzlib, msys2もダウンロードされる。
    ダウンロード・インストールされたパッケージはそれぞれ%VCPKG_ROOT%\downloads, %VCPKG_ROOT%\installedに保存されている。
  10. 今回はstaticライブラリも欲しかったので、

    C++REST (cpprest)をスタティック構成のMFCと一緒に使う - ドナドナされるプログラマのメモを参照しながら以下を実行。
    cpprestsdk:x64-windows-static


前回予告したとおり、新たに購入したノートPC Lenovo ThinkPad T14 Gen5 AMDベンチマーク結果を報告。

donadona.hatenablog.jp

    Lenovo Lenovo
    ThinkPad T14 Gen1 AMD ThinkPad T14 Gen5 AMD
CPU Name Ryzen7 PRO 4750U Ryzen7 Pro 8840U
  Code name Renoir (Zen 2) Hawk Point (Zen 4)
  BaseClock 1.7GHz 3.3GHz
  Core/Thread 8 / 16 8 / 16
  TDP 15W 28W
GPU   Radeon Rx Vega 7 AMD Radeon 780M
RAM Type DDR4 1600MHz DDR5 5600MHz
  Capacity 16GB 8GB
CPU-Z 2.01.1 Single 483.6  
  Multi 3316.1  
Cinebench R23 Multi 5561 11483
  Single 1085 1732
Cinebench R24 Multi 344 665
  Single 68 103
PSO2 EP4 Setting: 6 5625 12704
PSO2 NGS All ON 2749 3947
DQ10 1.6   8491 9656
FFBench XIV 黄金のレガシー 高品質(ノートPC) 3402 5039
SSD   SSD-CK1.0N3/N 1TB HFS256GEM9X169N
CrystalDiskMark 8.0.4 SEQ1M Q8T1 R1725.72 / W1310.45 R6252.18 / W3474.21
  SEQ1M Q1T1 R1263.62 / W423.71 R3496.37 / W2409.54
  RND4K Q32T1 R390.23 / W357.32 R535.76 / W454.71
  RND4K Q1T1 R41.93 / W113.25 R72.92 / W140.53

CPUのシングルスレッド性能は1.7倍、マルチスレッド性能は2倍、グラフィック能力は1.2倍程度といったところか。搭載するSSDはなかなか高速だけど、これは既存ノートPCの1TB品に載せ替える予定。

 

 

Lenovo ThinkPad T14 Gen5 AMDの購入とSSD交換・メモリ増設

今使っているLenovo ThinkPad T14 Gen1 AMDを購入してから4.5年が経過し、当初予定していた買い替え期日を過ぎたので買い替えた。買ったのはLenovo ThinkPad T14 Gen5 AMD、つまり同一シリーズの後継品。ThinkPadはメンテナンスマニュアルが充実しているので、自分みたいにノートPCを時々分解する人には助かるのよね。

購入したのはRAM 8GB, SSD 256GBのWindows11 Professional品(型式: 21MCCTO1WW)。RAMやSSDの容量が心もとなく見えるけど、Lenovo外で大容量のものを購入して交換・増設したほうが圧倒的に安いので最小容量のものを選択した。

今回ミスったのは、スマートカードリーダーの有無。Gen1ではスマートカードリーダーオプションを付けなくてもSDカードを読めたんだけど、Gen5ではスマートカードリーダーオプションを付けないとSDカード読み取り不可能。何度見返しても商品説明ページにそんな事書いてなくて、商品到着後に悲しんだ。。。

買い替え前後でのPCスペックを比較すると、こんな感じ。右が今回購入したPC。

Lenovo Lenovo
ThinkPad T14 Gen1 ThinkPad T14 Gen5
Ryzen7 PRO 4750U Ryzen7 Pro 8840U
Renoir (Zen 2) Hawk Point (Zen 4)
1.7GHz 3.3GHz
8 / 16 8 / 16
15W 28W
Radeon Rx Vega 7 AMD Radeon 780M
DDR4 1600MHz DDR5 5600MHz
16GB 8GB

 

そして、RAMは空いているスロットにSO-DIMM DDR5 5600 16GB(crucial CT16G56C46S5; ¥5680)を追加し、SSDは今までのノートPCにつけてた1TB品と交換した。

まずはそれぞれのPCで回復ディスクを作成して、SSD交換後のWindows新規インストールに備える。そして交換は、メンテナンスマニュアルにかかれているとおりに

Windowsにて高速起動の無効化

UEFIにて内蔵バッテリの切り離し

をやってからカバーを開けて、バッテリの接続線を外してから実施。

内蔵バッテリの無効化

カバーを開けたところ

あとは元通りカバーを閉めて、Windowsクリーンインストールを開始。これが終わったらベンチマークをしよう。

_alloca, _malloca関数について

マイクロソフトのテクニカルノートを読んでいたら、以下のような記述を発見。

各マクロの実装では、_alloca() 関数を使用して、ヒープではなくスタックからメモリを割り当てます。 スタックからメモリを割り当てると、メモリをヒープに割り当てるよりもはるかに高速であり、関数が終了したときにメモリが自動的に解放されます。 」

learn.microsoft.com

具体的にはどのくらい速度が違うんだろう?ということで試しに測ることにした。比較には、malloc()やnew, _alloca()に加え_malloca()を用いた。_malloca()は割り当てようとするメモリ量によってはヒープから確保する(malloc()等と同じ動作をする)らしい。以下、_alloca()および_malloca()のドキュメントへのリンク。

learn.microsoft.com

learn.microsoft.com

_alloca()で確保したメモリは関数から抜ける際に自動開放されるらしいので、メモリを確保するだけの関数を用意し、それを複数回呼び出して所要時間を比べた。CPUクロックのブーストなどの影響を最低限とするため、malloc->new->_alloca->_malloca->malloc->new...と測定対象を順番に切り替える実装とした。ただし、1呼び出しごとに切り替えると時間計測関連の処理時間が無視できない気がしたので、測定対象はloop回ずつ実行してから切り替えるように実装し、測定対象切り替えをtrialセット繰り返すようにした。コードのイメージは文末に記載しているので、イメージの把握はそちらからどうぞ。

こうしてできたソフトがこちら。

github.com

これによる計測結果の例がこちら。

1000バイト確保時。_mallocaはスタックからメモリ確保している。_malloca, _alloca共に速い。

なかなかの速度差である。他の条件も含めて表にまとめたのがこちら。黄色くハッチングしているのは、その前後で値が大きく変化している箇所。例えば、_mallocaについてデータサイズ1008と1009では時間が6倍ほど変化している。同様に16368と16369では3倍ほど変化している。

データサイズ malloc new _alloca _malloca
1008 0.260064 0.268249 0.03295 0.042054
1009 0.253565 0.260804 0.033637 0.267588
16368 0.253919 0.26037 0.033699 0.269342
16369 0.249189 0.258109 0.032459 0.834997
16384 0.252267 0.258637 0.032342 0.824545
16385 0.774677 0.800355 0.03344 0.802161
1024000 0.808438 0.820124 0.032369 0.830337
1025000 - - Stack Overflow -

 

_mallocaの速度が1008バイト付近で変化しているのは、サイズが_ALLOCA_S_THRESHOLDを超えたからだろう。一方で16kBでの変化はよくわからない。16384、すなわち2^14が絡んでいるようには見えるが、なぜだろう?L1データキャッシュサイズ:32kBと絡んでいたりするんだろうか?アルゴリズム上、2^n単位でメモリを確保していて、16384を超えるとL1データキャッシュ全部が必要となってしまい、他のデータのキャッシュと取り合いになってL2データキャッシュに溢れちゃうとか。ちょっとおもしろいデータだった。

 

なおテストコードは概略こんなかんじ。

gist.github.com