DirectML 版本历史记录

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。

版本表

DirectML 版本 支持的功能级别(请参阅 DirectML 功能级别历史记录 DML_TARGET_VERSION 首次在 (OS) 中提供 首次在(可再发行程序包)中提供
1.15.4 DML_FEATURE_LEVEL_6_4 0x6400 DirectML-1.15.4
1.15.3 DML_FEATURE_LEVEL_6_4 0x6400 DirectML-1.15.3
1.15.2 DML_FEATURE_LEVEL_6_4 0x6400 DirectML-1.15.2
1.15.1 DML_FEATURE_LEVEL_6_4 0x6400 DirectML-1.15.1
1.15.0 DML_FEATURE_LEVEL_6_4DML_FEATURE_LEVEL_6_3 0x64000x6300 DirectML-1.15.0
1.13.1 DML_FEATURE_LEVEL_6_2 0x6200 DirectML-1.13.1
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 影响
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_VERSION0x2000

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

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

另请参阅