DirectML 作为 Windows 的系统组件进行分发,是 Windows 操作系统(OS)的一部分,并在 Windows 10 版本 1903(10.0,内部版本 18362)及更高版本中提供。
从 DirectML 版本 1.4.0 开始,DirectML 也可用作独立可再发行组件包(请参阅 Microsoft.AI.DirectML),这对于希望使用固定版本的 DirectML 的应用程序或在较旧版本的 Windows 10 上运行时非常有用。
DirectML 遵循 语义版本控制 约定。 也就是说,版本号遵循格式 major.minor.patch
。 DirectML 的第一个版本版本为 1.0.0。
版本表
1 未广泛提供 DirectML 的 1.2.0 和 1.3.0 中间版本。
选择 DirectML 目标版本
为方便起见,DirectML.h
头文件中的某些功能会根据 DML_TARGET_VERSION
宏的值有条件地声明。 通过将宏设置为 DML_TARGET_VERSION
特定值,可以从应用程序中排除部分 DirectML.h
内容。
如果你使用的是 DirectML.h
的较新副本,但你的目标是较低版本的 DirectML 二进制文件,这可能会有帮助,因为它能确保任何试图使用超出所选目标级别的功能的尝试都无法编译。 此机制类似于 NTDDI_VERSION
宏(请参阅 条件声明的宏)。
下面是宏的有效值 DML_TARGET_VERSION
。
DML_TARGET_VERSION | 影响 |
---|---|
0x6400 |
任何需要版本高于 1.15.0 的 DirectML 的功能都不包括在 DirectML.h 中。 |
0x6300 |
任何需要 DirectML 版本高于 1.15.0 的或者属于 DML_FEATURE_LEVEL_6_4 的功能都被排除在 DirectML.h 之外。 |
0x6200 |
任何需要 DirectML 版本高于 1.13.0 的功能都不包括在内DirectML.h 。 |
0x6100 |
任何需要 DirectML 版本高于 1.12.0 的功能都排除在 DirectML.h 之外。 |
0x6000 |
任何需要版本高于 1.11.0 的 DirectML 功能都被排除在DirectML.h 之外。 |
0x5200 |
任何需要DirectML新于1.10.0版本的功能都被排除在DirectML.h 之外。 |
0x5100 |
任何需要新版 1.9.0 以上的 DirectML 的特性均不包括在 DirectML.h 内。 |
0x5000 |
任何需要 DirectML 版本高于 1.8.0 的功能都排除在 DirectML.h 之外。 |
0x4100 |
任何需要 DirectML 版本高于 1.7.0 的功能都排除在 DirectML.h 之外。 |
0x4000 |
凡是要求 DirectML 版本高于 1.6.0 的功能都不会包括在 DirectML.h 中。 |
0x3100 |
任何需要 DirectML 版本高于 1.5.0 的功能都排除在 DirectML.h 之外。 |
0x3000 |
任何需要 DirectML 版本高于 1.4.0 的功能都排除在 DirectML.h 之外。 |
0x2000 |
任何需要使用高于版本 1.1.0 的 DirectML 的功能都将被排除在DirectML.h 之外。 |
0x1000 |
任何需要高于 1.0.0 版本的 DirectML 功能都被排除在DirectML.h 之外。 |
未设置 | 将自动为你选择目标版本。 有关详细信息,请参阅下文。 |
如果 DML_TARGET_VERSION
未设置,则按以下方式自动选择它。
DML_TARGET_VERSION_USE_LATEST
如果定义了宏,则选择最新的目标版本。- 否则,会根据宏的值
NTDDI_VERSION
选择目标版本。NTDDI_WIN10_ZN
结果为0x6000
的目标版本。NTDDI_WIN10_NI
结果为0x5000
的目标版本。NTDDI_WIN10_CO
结果为0x4000
的目标版本。NTDDI_WIN10_FE
结果为0x3000
的目标版本。NTDDI_WIN10_VB
结果为0x2000
的目标版本。NTDDI_WIN10_19H1
结果为0x1000
的目标版本。- 如果
NTDDI_VERSION
未定义,则选择最新的目标版本(就好像指定了DML_TARGET_VERSION_USE_LATEST
)。
示例:
请考虑使用 Windows 软件开发工具包版本 10.0.19041.0(Windows 10 版本 2004)的应用程序。 从上表可以看出,这对应的 DirectML 版本是 1.1.0,对应的 DML_TARGET_VERSION
是 0x2000
。
如果既未设置 DML_TARGET_VERSION
宏也未设置 NTDDI_VERSION
宏,则所选目标版本将默认为 0x2000
,并且 DirectML.h
中的所有内容都将可供使用。
如果希望应用程序能够在 Windows 10 版本 1903(10.0;内部版本 18362)上运行,那么可以 #define DML_TARGET_VERSION 0x1000
,这将排除 DirectML.h
中 DirectML 版本 1.0.0 不支持的所有内容。 这可确保尝试使用需要更高版本的功能将无法编译。
DirectML 版本与功能级别
DirectML 版本(例如 1.0.0 或 1.4.0)描述了 DirectML 的特定版本,包括其关联的 DirectML.h
头文件和 .lib
文件。
功能级别(例如, DML_FEATURE_LEVEL_1_0
或 DML_FEATURE_LEVEL_2_0
)描述 API 的基础实现的功能,与所用版本 DirectML.h
不同。
例如,针对较新的 SDK 构建应用程序,但在较旧版本的 Windows 上运行,可能会(在运行时)看到受支持的功能级别较低,即使它针对最新的 SDK 进行编译也是如此。