Dell OptiPlex 3090 SFF に NVIDIA Tesla P100(eGPU経由)を接続したところ、Device Manager で Code 12 エラーが発生。原因はBIOSに「Above 4G Decoding」の設定項目が存在しないことでした。数々の手法を試した末、Smokeless_UMAF(UMAF_BETA)で解決できたので記録として残します。
環境
| ホストPC | Dell OptiPlex 3090 SFF |
| GPU | NVIDIA Tesla P100 PCIe 12GB(HBM2) |
| eGPUドック | Aoostar AG01(OCuLink接続) |
| OS | Windows 11 64bit |
| 目的 | ローカルLLM推論環境の強化(Ollama + Open WebUI) |
| vBIOS | 86.00.41.00.07(最新) |
問題:Code 12 エラー
P100をeGPUドック経由で接続したところ、Device Managerで以下のエラーが発生しました。
「このデバイスは使用できる十分な空きリソースを見つけられません(Code 12)」
原因
OptiPlex 3090のBIOSに Above 4G Decoding の設定項目が存在せず、PCIeのメモリマップが4GB以下の空間に制限されているため、12GB VRAMを持つP100のBARアドレスを割り当てられないことが原因です。
確認方法として、管理者PowerShellで以下を実行すると、解決前は全て 0x0 スタートのアドレスしか返ってきませんでした。
Get-WmiObject Win32_DeviceMemoryAddress | Where-Object {$_.StartingAddress -gt 4294967296}
試みて失敗したアプローチ
1. bcdedit フラグ
bcdedit /set pciexpress forcedisable
効果なし。
2. DSDT override(レジストリ経由)
OemTablePath レジストリキーを使いカスタムDSDTをロードする方法。AML修正で64bitメモリ範囲を追加したが効果なし。
3. grub-mod-setup_var(UEFI Shell経由)
IFR抽出でAbove 4G DecodingのVarOffsetを特定し、UEFI ShellからNVRAMに直接書き込み。値は書けたがDXEドライバーに無視された。
Dell独自BIOSのDXEドライバーは起動時にNVRAMの値をチェックして上書きする実装になっているため、NVRAMに書いても起動時にリセットされてしまいます。
4. ReBarUEFI .ffs モジュール注入
効果なし。
5. RWEverything
BIOSレジスタへの直接アクセスを試みたが変更が反映されず。
解決策:Smokeless_UMAF(UMAF_BETA)
Smokeless_UMAF とは
GitHub で公開されている汎用UEFI設定書き換えツールです。AMD系で有名ですが、Intel系でも動作する場合があります。作者DavidS95によると「AMD成功率95%以上、Intel系は25%未満」とのことですが、動く機種は動きます。
よく「AMD専用ツール」と誤解されていますが、正確にはAMD・Intel両方のUEFI(BIOS)を扱える汎用ツールです。Dell・HP・Lenovoなどの OEM BIOS を対象にした実験コミュニティでも使われています。
手順
1. ダウンロード
以下のGitHubリリースページから UMAF_BETA.zip を入手します。
👉 https://github.com/DavidS95/Smokeless_UMAF/releases
2. USBメモリの準備
- USBメモリを FAT32 でフォーマット
- zipを解凍してUSBのルートに配置(EFIフォルダがルートに来る形)
3. Secure Boot を無効化
- 起動時
F2でBIOS画面を開く - Secure Boot をオフに設定して保存
4. USBから起動
- 起動時
F12でBootメニューを開く UEFI: [USBデバイス名]を選択
5. Device Manager で設定変更
- UMAF起動後、Device Manager を開く
- Above 4G Decoding を探して Enabled に変更
- 保存して再起動
⚠️ Device Manager に項目が何も表示されない場合は、そのBIOSでは非対応です。万が一起動しなくなった場合はCMOSリセット(マザーボードのCR2032電池を抜いて5〜10分放置)で復帰できます。
結果確認
Device Manager
Code 12 が解消し、P100が正常に認識されました。
PowerShell でMMIOアドレス確認
Get-WmiObject Win32_DeviceMemoryAddress | Where-Object {$_.StartingAddress -gt 4294967296}
解決後は以下のように4GBを大きく超えるアドレスが確認できました。
MemoryType Name Status
---------- ---- ------
Bar 0x0000007FFFEFC000-0x0000007FFFEFFFFF OK
Bar 0x0000007FFFF00000-0x0000007FFFFFFFFF OK
Bar 0x0000007C00000000-0x0000007C01FFFFFF OK
P100のBARが64bitアドレス空間(約500GB付近)に割り当てられていることが確認できます。解決前は全て 0x0 スタートでした。
無事ollamaがP100で動きました。

まとめ
| 項目 | 内容 |
| 根本原因 | OptiPlex 3090 BIOSにAbove 4G Decoding項目なし |
| 失敗した手法 | bcdedit / DSDT override / setup_var / ReBarUEFI / RWEverything |
| 解決手法 | Smokeless_UMAF(UMAF_BETA)でBIOS設定を直接変更 |
| 確認方法 | PowerShellでMMIOアドレスが4GB超になっているか確認 |
setup_var ではDXEドライバーに無視されてしまいましたが、UMAF_BETA は別のアプローチでBIOS設定を変更できたと思われます(詳細なメカニズムは非公開のため不明)。



コメント