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_VERSION0x2000

如果未设置 DML_TARGET_VERSIONNTDDI_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_0DML_FEATURE_LEVEL_2_0)描述 API 的基础实现的功能,其可能与所用的 DirectML.h 版本不同。

例如,针对较新的 SDK 构建的应用程序,但在较旧版本的 Windows 上运行,可能会(在运行时)看到受支持的功能级别较低,即使它针对最新的 SDK 进行编译也是如此。

另请参阅