未だ遅いです。
どうにもLPSolverが遅いのがネックなので、禁断のハードウェア増強を検討します。
4060TI→3800→5070TIと3度目のUpgradeになります。
1. 3800 → 5900 Ti でどれくらい速くなるか(ざっくり見積もり)
GPU Barrier Solver(COPT / cuOpt どちらでも)で効くのは主に:
FP64 性能
メモリ帯域
L2 キャッシュ容量
Blackwell 世代(5900 Ti)は、Ada 世代(3800)より
FP64: おおよそ 2〜3 倍
メモリ帯域: 1.5〜2 倍程度
L2: 大幅増(スパース行列のアクセス効率アップ)
を見込めるので、Barrier 1 回あたりの時間は「2〜4 倍程度の短縮」が現実的なレンジです。
いま 30〜90 秒かかっているなら、 10〜30 秒くらいまで落ちる可能性は十分ある、という感覚値。
ただし:
行列の疎度・構造
ソルバー側の GPU 実装の最適化度合い
によって振れます。「最低でも 2 倍、うまくハマれば 3〜4 倍」くらいを期待値にしておくのが妥当です。
2. FP32 にする方法はないのか?
結論から言うと:
「本気の Barrier Solver を FP32 で回す」のは、ほぼ現実的ではないです。
理由はシンプルで、
Barrier は KKT 系の解法(線形代数)が中心で、
そこでの誤差が dual/primal の精度に直結し、
B&P の RMP では dual の精度が列生成の品質に直結するから。
FP32 にすると:
条件数の悪い行列で誤差が爆増
収束しない/反復数が増える/列生成が壊れる
というリスクが高く、「速くなったけど解が信用できない」状態になりやすい。
3. 例外的に FP32 を絡める可能性があるとしたら
完全 FP32 は無理でも、ソルバー側が内部で:
mixed precision(FP32+FP64)
前処理だけ FP32、最終解は FP64
のような工夫をしている場合はあります。 ただしこれは ソルバー実装側の話で、ユーザーが「FP32 モード」を選ぶようなものではないことが多いです。
つまり、「ユーザー設定として FP32 Barrier に切り替える」選択肢は、基本的に存在しないと思っておいた方がいい。
5070TIではなく5070 12GBならどうなりますか?
3800 → 5070(12GB)なら、Barrier はざっくり 1.3〜2 倍くらいの短縮が上限に近い
5070 Ti と比べると、FP64 とメモリ帯域が落ちるので、GPU Barrier 目的ならかなり見劣りする
RMP が大きいなら、12GB はメモリ容量的にもかなりギリギリになりうる
1. 5070 12GB の位置づけ(GPU Barrier 観点)
5070 無印は、
FP64 性能: Ti よりかなり低い
メモリ帯域: Ti より低い
VRAM: 12GB(Ti はもっと多い想定)
GPU Barrier Solverは、
大規模疎行列の FP64 演算+メモリアクセスが支配的なので、
Ti との差がそのまま性能差になりやすいです。
そのため、
3800 → 5070 無印だと、「世代差+多少の帯域アップ」で 1.3〜2 倍程度が現実的なレンジ 「劇的に世界が変わる」ほどではない。
2. メモリ 12GB のボトルネック
あなたの RMP は、
行数 12,000
列数 数万
B&P で列が増え続ける構造
なので、
行列+ワークスペース+ソルバー内部バッファを含めると、 12GB は「余裕がある」とは言いづらいラインです。
余裕がないと、
ページングや分割処理が増える
転送オーバーヘッドが増える → 結局、GPU のポテンシャルを出し切れないことが多い。
3. 5070 無印を選ぶ意味があるケース
問題サイズがそこまで大きくない(行数・列数がもっと小さい)
コスト重視で「とりあえず 1.5 倍くらい速くなればいい」ラインを狙う
他の用途(ゲーム・一般用途)との兼用で、Ti まで要らない
Barrier Solver を「本気でボトルネック潰す」目的なら、
5070 無印より、5070 Ti(あるいは 5900 Ti クラス)を狙った方が投資対効果は明らかに良いです。