DirectML 版本历史记录
DirectML 作为 Windows 的系统组件分发,在 Windows 10 版本 1903(10.0;版本 18362)以及更新版本中作为 Windows 操作系统 (OS) 的一部分提供。
从 DirectML 版本 1.4.0 开始,DirectML 也可用作独立可再分发包(请参阅 Microsoft.AI.DirectML),这对于希望使用固定版本的 DirectML 的应用程序或在较旧版本的 Windows 10 上运行的应用程序非常有用。
DirectML 遵循语义化版本控制约定。 也就是说,版本号遵循格式 major.minor.patch
。 DirectML 的第一个版本为 1.0.0。
版本表
DirectML 版本 | 支持的功能级别(请参阅 DirectML 功能级别历史记录) | DML_TARGET_VERSION | 首次提供于 (OS) | 首次提供于(可再发行组件) |
---|---|---|---|---|
1.13.0 | DML_FEATURE_LEVEL_6_2 | 0x6200 |
空值 | DirectML-1.13.0 |
1.12.0 | DML_FEATURE_LEVEL_6_1 | 0x6100 |
空值 | DirectML-1.12.0 |
1.11.0 | DML_FEATURE_LEVEL_6_0 | 0x6000 |
空值 | DirectML-1.11.0 |
1.10.0 | DML_FEATURE_LEVEL_5_2 | 0x5200 |
空值 | DirectML-1.10.0 |
1.9.0 | DML_FEATURE_LEVEL_5_1 | 0x5100 |
空值 | DirectML-1.9.0 |
1.8.0 | DML_FEATURE_LEVEL_5_0 | 0x5000 |
Windows 11(版本 10.0.22621;22H2) | DirectML-1.8.0 |
1.7.0 | DML_FEATURE_LEVEL_4_1 | 0x4100 |
空值 | DirectML-1.7.0 |
1.6.0 | DML_FEATURE_LEVEL_4_0 | 0x4000 |
Windows 11(版本 10.0.22000;21H2) | DirectML-1.6.0 |
1.5.0 | DML_FEATURE_LEVEL_3_1 | 0x3100 |
空值 | DirectML-1.5.0 |
1.4.01 | DML_FEATURE_LEVEL_3_0 | 0x3000 |
空值 | DirectML-1.4.0 |
1.1.0 | DML_FEATURE_LEVEL_2_0 | 0x2000 |
Windows 10,版本 2004(10.0;版本 19041)(Windows 10 2020 年 5 月更新)。 亦称为“20H1”。 | 空值 |
1.0.0 | DML_FEATURE_LEVEL_1_0 | 0x1000 |
Windows 10,版本 1903(10.0;版本 18362)(Windows 10 2019 年 5 月更新)。 亦称为“19H1”。 | 空值 |
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 | 效果 |
---|---|
0x6200 |
任何需要版本 1.13.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x6100 |
任何需要版本 1.12.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x6000 |
任何需要版本 1.11.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x5200 |
任何需要版本 1.10.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x5100 |
任何需要版本 1.9.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x5000 |
任何需要版本 1.8.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x4100 |
任何需要版本 1.7.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x4000 |
任何需要版本 1.6.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x3100 |
任何需要版本 1.5.0 以上 DirectML 的功能都从 DirectML.h 排除。 |
0x3000 |
任何需要版本 1.4.0 以上 DirectML 的功能都从 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 软件开发工具包 (Windows SDK) 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 版本 1.0.0 不支持的 DirectML.h
中所有内容。 这可确保需要更高版本的功能使用尝试将无法编译。
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 进行编译也是如此。