背景
- Linux and Windows で Vulkan で機械学習をしたい
- WSL2 で Linux から DirectX/DirectML/Vulkan/OpenCL/CUDA が使えるようになる(声明だけ)
- Vulkan 自体には(まだ)機械学習関連は無いので, とりあえず DirectML でしのぐ
- WINE or Mesa チームが, DirectML の Vulkan 実装を作ってくれるかも?という期待もある.
- ちなみに WINE or Mesa チームは, D3D12 を Vulkan で動かせるようにしてくれています.
現状, WSL2 環境で DirectML/Vulkan/OpenCL を Linux C/C++ アプリ側からどう使うのかは不明です.
(clang(-cl) で Windows 関連ヘッダを直接扱えるようにするのか, なにかしら stub ファイルを用意するのですかね)
とりあえず llvm-mingw(clang) で DirectML.h
を使うビルド環境を整えておいて, あとで Linux に移行しやすいようにしておきたいです.
directml.h のコンパイルが通るのは確認しました.
セットアップ
d3d12.h と directml.h あたりのヘッダが必要なので, Windows SDK を取得しておきます.
DirectML を使うには 10.0.18362.0 or later(MSVC version 16.2 or later) が必要になります.
DirectML.h は Timestamp は 2018 年と以外と前から存在しています.
llvm-mingw(clang)で,
- 他の windows 関連のシステムヘッダは mingw のほうを見るようにする
- e.g. d3d12.h, directml.h だけ別フォルダで管理など
- C++ モードでコンパイルする(directml.h がクラス継承など使っているため)
- C モードだとそもそもだめっぽい
- http://tsubaki.hatenablog.com/entry/20110115/1295080728 を参考にちょこっと修正
で, 一応ビルドができるのは確認しました.
ただ, 実際にはここから Microsoft 独自の COM(?) コードを書いての API 呼び出しなどがあるため, 道は遠いです.
WSL2 で正式に GPU 使えるのも来年のようですし, 1 ~ 2 年くらいかけてゆっくり開発環境対応ですかね.
その他参考
-
https://github.com/subatomicglue/cross-compile-macosx-clang-windows-msvc
- Windows cross compile Makefile 例