CN113975816B - 一种基于hook的通过DirectX接口使用显卡的显卡分配方法 - Google Patents
一种基于hook的通过DirectX接口使用显卡的显卡分配方法 Download PDFInfo
- Publication number
- CN113975816B CN113975816B CN202111593691.7A CN202111593691A CN113975816B CN 113975816 B CN113975816 B CN 113975816B CN 202111593691 A CN202111593691 A CN 202111593691A CN 113975816 B CN113975816 B CN 113975816B
- Authority
- CN
- China
- Prior art keywords
- card
- display card
- display
- interface
- enumeration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/70—Game security or game management aspects
- A63F13/77—Game security or game management aspects involving data related to game devices or game servers, e.g. configuration data, software version or amount of memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请提供一种基于hook的通过DirectX接口使用显卡的显卡分配方法,包括:基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口;根据所述枚举显卡接口确定枚举结果;对所述枚举结果进行显卡分配逻辑处理,确定适用于所述游戏进程的指定显卡;对所述指定显卡进行初始化。本申请基于hook的方法接管游戏进程申请显卡的操作,并在运行设置好的显卡分配逻辑后给游戏分配显卡设备,实现自动分配显卡的目的,不需要手动选择显卡设备,解决了多路游戏启动在同一个显卡上导致的算力不足和其他显卡资源浪费等问题。本申请还提供一种基于hook的通过DirectX接口使用显卡的显卡分配装置。
Description
技术领域
本申请提供一种显卡分配技术,尤其涉及一种基于hook 的通过DirectX 接口使用显卡的显卡分配方法。本申请还涉及一种基于hook 的通过DirectX 接口使用显卡的显卡分配装置。
背景技术
游戏当前成为人们生活中常见的娱乐项目。游戏开发者通常是使用DirectX接口渲染游戏画面、或者使用底层通过DirectX去实现渲染引擎的游戏引擎(例如Unity3D、虚幻引擎等),这种情况下一般不会针对多GPU 场景做优化。
当游戏启动的时候只会使用同一个GPU的算力,并且即使启动多路游戏的时候依然只能使用同一个GPU。即,现有技术中存在多路游戏启动在同一个显卡上产生的算力不足以及其他显卡资源浪费等问题。因此,如何使游戏在多路同时运行时能够合理的分配在多张GPU上成为当前亟需解决的问题。
发明内容
为解决多路游戏启动在同一个显卡上产生的算力不足以及其他显卡资源浪费等问题,本申请提供基于hook 的通过DirectX 接口使用显卡的显卡分配方法。本申请还涉及一种基于hook 的通过DirectX 接口使用显卡的显卡分配装置。
本申请提供一种基于hook 的通过DirectX 接口使用显卡的显卡分配方法,包括:
基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口;
根据所述枚举显卡接口确定枚举结果;
对所述枚举结果进行显卡分配逻辑处理,确定适用于所述游戏进程的指定显卡;
对所述指定显卡进行初始化。
可选的,所述根据所述枚举显卡接口确定枚举结果,包括:根据所述枚举显卡接口确定可用显卡的数量信息。
可选的,所述显卡分配逻辑,包括:显卡的平均分配逻辑或者显卡的优先级分配逻辑。
可选的,所述显卡分配逻辑可以跨进程通信。
可选的,对所述指定显卡进行初始化,包括:通过显卡序号对所述指定显卡进行初始化。
本申请还提供一种基于hook 的通过DirectX 接口使用显卡的显卡分配装置,包括:
接口接管单元,用于基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口;
枚举结果确定单元,用于根据所述枚举显卡接口确定枚举结果;
指定显卡确定单元,用于对所述枚举结果进行显卡分配逻辑处理,确定适用于所述游戏进程的指定显卡;
初始化单元,用于对所述指定显卡进行初始化。
可选的,所述根据所述枚举显卡接口确定枚举结果,包括:根据所述枚举显卡接口确定可用显卡的数量信息。
可选的,所述显卡分配逻辑,包括:显卡的平均分配逻辑或者显卡的优先级分配逻辑。
可选的,所述显卡分配逻辑可以跨进程通信。
可选的,对所述指定显卡进行初始化,包括:通过显卡序号对所述指定显卡进行初始化。
本申请相对与现有技术的优点:
本申请提供一种基于hook 的通过DirectX 接口使用显卡的显卡分配方法,包括:基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口;根据所述枚举显卡接口确定枚举结果;对所述枚举结果进行显卡分配逻辑处理,确定适用于所述游戏进程的指定显卡;对所述指定显卡进行初始化。本申请基于hook的方法接管游戏进程申请显卡的操作,并在运行设置好的显卡分配逻辑后给游戏分配显卡设备,实现自动分配显卡的目的,不需要手动选择显卡设备,解决了多路游戏启动在同一个显卡上导致的算力不足和其他显卡资源浪费等问题。
附图说明
图1是本申请中基于hook 的通过DirectX 接口使用显卡的显卡分配的流程图。
图2是本申请中针对多路游戏进程的显卡分配流程图。
图3是本申请中基于hook 的通过DirectX 接口使用显卡的显卡分配装置示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请提供一种基于hook 的通过DirectX 接口使用显卡的显卡分配方法,包括:基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口;根据所述枚举显卡接口确定枚举结果;对所述枚举结果进行显卡分配逻辑处理,确定适用于所述游戏进程的指定显卡;对所述指定显卡进行初始化。本申请基于hook的方法接管游戏进程申请显卡的操作,并在运行设置好的显卡分配逻辑后给游戏分配显卡设备,实现自动分配显卡的目的,不需要手动选择显卡设备,解决了多路游戏启动在同一个显卡上导致的算力不足和其他显卡资源浪费等问题。
图1是是本申请中基于hook 的通过DirectX 接口使用显卡的显卡分配的流程图。
请参照图1所示,S101基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口。
为便于更好地理解本申请,先介绍一下本申请中用到的概念。本申请中的hook技术又叫做钩子函数,在操作系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。
本申请中的DirectX是Direct eXtension的简写,简称DX。它是由微软公司创建的多媒体编程接口,是一种应用程序接口(API)。DirectX可以让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。DirectX已被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发。
需要说明的是,本申请中的基于hook 的通过DirectX 接口使用显卡的显卡分配方法,不仅适用于单路游戏进程,还适用于多路游戏进程。
以下先以单路游戏进程为例进行说明。单路游戏进程启动后,基于游戏进程发送的分配显卡的请求信息,先接管枚举显卡接口和引擎初始化接口。
请参照图1所示,S102根据所述枚举显卡接口确定枚举结果。
本步骤用于在引擎初始化之前枚举显卡获取枚举结果。本申请中的枚举结果优选为显卡设备数量信息。
请参照图1所示,S103对所述枚举结果进行显卡分配逻辑处理,确定适用于所述游戏进程的指定显卡。
本申请通过之前设置好的显卡分配逻辑对上述枚举结果进行处理,自动确定适合该单路游戏进程的指定显卡设备。
请参照图1所示,S104对所述指定显卡进行初始化。
对上述指定显卡设备进行初始化,初始化完成后使用该指定显卡继续运行即刻。优选的,本申请是通过指定显卡序号完成对所述指定显卡的初始化。
以上便是单路游戏进程显卡分配的全过程。但是,本申请也适用于多路游戏进程显卡分配,如图2所示。由于多路游戏进程显卡分配方法和单路游戏进程分配方法相似,所以下文只是针对两者的区别点进行描述。
图2是本申请中针对多路游戏进程的显卡分配流程图。
请参照图2所示,S201多路游戏进程启动,发送多条分配显卡的请求信息。
S202基于多条请求信息,通过hook显卡接口确定枚举结果。
S203对所述枚举结果进行显卡分配逻辑处理,获得显卡分配结果。
本申请中的所述显卡分配逻辑可以跨进程通信,并根据期望的分配逻辑来分配指定显卡,如平均分配或者按照优先级分配(在第一个显卡分配满之后再分配第二个)等等。
优选的,平均分配指定显卡的可根据各个显卡可承载的游戏进程数来计算,如以下公式:
其中,X为分配给每个显卡的游戏进程平均数,x为承载相同游戏进程数的显卡数量,w为显卡可承载的游戏进程数。当然,平均分配显卡的方法还有很多,只要能实现均可,在此不过多介绍。
综上,本申请提供一种基于hook 的通过DirectX 接口使用显卡的显卡分配方法,不仅可以实现自动分配显卡的功能,还可以适用于程序本身不支持修改的情况,只需改动显卡分配逻辑即可,如非自己开发的程序和应用,使得适用场景更广泛更通用。而且,在多个显卡的场景下还可以充分使用显卡算力并保证游戏进程能够获得足够的显卡算力,避免了多个游戏进程使用同一张显卡导致算力不足的情况。
本申请还提供一种基于hook 的通过DirectX 接口使用显卡的显卡分配装置。
图3是本申请中基于hook 的通过DirectX 接口使用显卡的显卡分配装置示意图。
请参照图3所示,接口接管单元301,用于基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口。
为便于更好地理解本申请,先介绍一下本申请中用到的概念。本申请中的hook技术又叫做钩子函数,在操作系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。
本申请中的DirectX是Direct eXtension的简写,简称DX。它是由微软公司创建的多媒体编程接口,是一种应用程序接口(API)。DirectX可以让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。DirectX已被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发。
需要说明的是,本申请中的基于hook 的通过DirectX 接口使用显卡的显卡分配方法,不仅适用于单路游戏进程,还适用于多路游戏进程。
以下先以单路游戏进程为例进行说明。单路游戏进程启动后,基于游戏进程发送的分配显卡的请求信息,先接管枚举显卡接口和引擎初始化接口。
请参照图3所示,枚举结果确定单元302,用于根据所述枚举显卡接口确定枚举结果。
本步骤用于在引擎初始化之前枚举显卡获取枚举结果。本申请中的枚举结果优选为显卡设备数量信息。
请参照图3所示,指定显卡确定单元303,用于对所述枚举结果进行显卡分配逻辑处理,确定适用于所述游戏进程的指定显卡。
本申请通过之前设置好的显卡分配逻辑对上述枚举结果进行处理,自动确定适合该单路游戏进程的指定显卡设备。
请参照图3所示,初始化单元304,用于对所述指定显卡进行初始化。
对上述指定显卡设备进行初始化,初始化完成后使用该指定显卡继续运行即刻。优选的,本申请是通过指定显卡序号完成对所述指定显卡的初始化。
以上便是单路游戏进程显卡分配的全过程。但是,本申请也适用于多路游戏进程显卡分配,如图2所示。由于多路游戏进程显卡分配方法和单路游戏进程分配方法相似,所以下文只是针对两者的区别点进行描述。
图2是本申请中针对多路游戏进程的显卡分配流程图。
请参照图2所示,S201多路游戏进程启动,发送多条分配显卡的请求信息。
S202基于多条请求信息,通过枚举显卡接口确定枚举结果。
S203对所述枚举结果进行显卡分配逻辑处理,获得显卡分配结果。
本申请中的所述显卡分配逻辑可以跨进程通信,并根据期望的分配逻辑来分配指定显卡,如平均分配或者按照优先级分配(在第一个显卡分配满之后再分配第二个)等等。
优选的,平均分配指定显卡的可根据各个显卡可承载的游戏进程数来计算,如以下公式:
其中,X为分配给每个显卡的游戏进程平均数,x为承载相同游戏进程数的显卡数量,w为显卡可承载的游戏进程数。当然,平均分配显卡的方法还有很多,只要能实现均可,在此不过多介绍。
综上,本申请提供一种基于hook 的通过DirectX 接口使用显卡的显卡分配方法,不仅可以实现自动分配显卡的功能,还可以适用于程序本身不支持修改的情况,只需改动显卡分配逻辑即可,如非自己开发的程序和应用,使得适用场景更广泛更通用。而且,在多个显卡的场景下还可以充分使用显卡算力并保证游戏进程能够获得足够的显卡算力,避免了多个游戏进程使用同一张显卡导致算力不足的情况。
Claims (4)
1.一种基于hook的通过DirectX接口使用显卡的显卡分配方法,其特征在于,包括:
基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口,所述游戏进程为多路游戏进程,所述多路游戏进程启动,发送多条分配显卡的请求信息;
在引擎初始化之前枚举显卡获取枚举结果,根据所述枚举显卡接口确定枚举结果,所述枚举结果为显卡设备数量信息;
对所述枚举结果进行显卡分配逻辑处理,获得显卡分配结果,确定适用于所述游戏进程的指定显卡,所述显卡分配逻辑为跨进程通信,并根据期望的显卡分配逻辑来分配指定显卡,所述显卡分配逻辑为平均分配,平均分配指定显卡根据各个显卡可承载的游戏进程数来计算,具体采用以下公式:
其中,X为分配给每个显卡的游戏进程平均数,x为承载相同游戏进程数的显卡数量,w为显卡可承载的游戏进程数;
对所述指定显卡进行初始化,并通过显卡序号对所述指定显卡进行初始化,初始化完成后使用该指定显卡继续运行。
2.根据权利要求1所述的基于hook的通过DirectX接口使用显卡的显卡分配方法,其特征在于,所述显卡分配逻辑为显卡的优先级分配逻辑。
3.一种基于hook的通过DirectX接口使用显卡的显卡分配装置,其特征在于,包括:
接口接管单元,用于基于游戏进程发送的分配显卡的请求信息,接管枚举显卡接口和引擎初始化接口,所述游戏进程为多路游戏进程,所述多路游戏进程启动,发送多条分配显卡的请求信息;
枚举结果确定单元,用于在引擎初始化之前枚举显卡获取枚举结果,并根据所述枚举显卡接口确定枚举结果,所述枚举结果为显卡设备数量信息;
指定显卡确定单元,用于对所述枚举结果进行显卡分配逻辑处理,获得显卡分配结果,确定适用于所述游戏进程的指定显卡,所述显卡分配逻辑为跨进程通信,并根据期望的显卡分配逻辑来分配指定显卡,所述显卡分配逻辑为平均分配,平均分配指定显卡根据各个显卡可承载的游戏进程数来计算,具体采用以下公式:
其中,X为分配给每个显卡的游戏进程平均数,x为承载相同游戏进程数的显卡数量,w为显卡可承载的游戏进程数;
初始化单元,用于对所述指定显卡进行初始化,并通过显卡序号对所述指定显卡进行初始化,初始化完成后使用该指定显卡继续运行。
4.根据权利要求3所述的基于hook的通过DirectX接口使用显卡的显卡分配装置,其特征在于,所述显卡分配逻辑为显卡的优先级分配逻辑。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111593691.7A CN113975816B (zh) | 2021-12-24 | 2021-12-24 | 一种基于hook的通过DirectX接口使用显卡的显卡分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111593691.7A CN113975816B (zh) | 2021-12-24 | 2021-12-24 | 一种基于hook的通过DirectX接口使用显卡的显卡分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113975816A CN113975816A (zh) | 2022-01-28 |
CN113975816B true CN113975816B (zh) | 2022-11-25 |
Family
ID=79734197
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111593691.7A Active CN113975816B (zh) | 2021-12-24 | 2021-12-24 | 一种基于hook的通过DirectX接口使用显卡的显卡分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113975816B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102890643A (zh) * | 2012-07-26 | 2013-01-23 | 上海交通大学 | 基于应用效果即时反馈的显卡虚拟化下的资源调度系统 |
CN108874544A (zh) * | 2018-06-11 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种gpu服务器io资源分配的方法及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7574534B2 (en) * | 2006-05-23 | 2009-08-11 | International Business Machines Corporation | Method for using device enumeration information to identify an operating system running on a computer system |
US7925876B2 (en) * | 2007-08-14 | 2011-04-12 | Hewlett-Packard Development Company, L.P. | Computer with extensible firmware interface implementing parallel storage-device enumeration |
CN106295326B (zh) * | 2016-08-12 | 2020-02-07 | 武汉斗鱼网络科技有限公司 | 一种用于获取显卡内容的内联hook方法和系统 |
CN107885653B (zh) * | 2016-09-30 | 2020-12-04 | 腾讯科技(深圳)有限公司 | 一种数据处理系统、方法及装置 |
CN107832141A (zh) * | 2017-10-11 | 2018-03-23 | 广东欧珀移动通信有限公司 | 应用程序运行控制方法及设备 |
CN110399214B (zh) * | 2019-05-30 | 2024-03-22 | 腾讯科技(深圳)有限公司 | 一种优化显卡负载的方法、装置及计算机设备 |
-
2021
- 2021-12-24 CN CN202111593691.7A patent/CN113975816B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102890643A (zh) * | 2012-07-26 | 2013-01-23 | 上海交通大学 | 基于应用效果即时反馈的显卡虚拟化下的资源调度系统 |
CN108874544A (zh) * | 2018-06-11 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种gpu服务器io资源分配的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113975816A (zh) | 2022-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111488196B (zh) | 渲染方法及装置、存储介质、处理器 | |
CN111737019B (zh) | 一种显存资源的调度方法、装置及计算机存储介质 | |
CN111450524B (zh) | 云游戏中的信息处理方法、装置、云游戏服务器及介质 | |
CN103283250B (zh) | 一种视频重定向的方法、装置、系统 | |
CN111450528A (zh) | 一种云游戏的渲染服务系统、方法及装置 | |
US9542715B2 (en) | Memory space mapping techniques for server based graphics processing | |
CN111966504B (zh) | 图形处理器中的任务处理方法及相关设备 | |
CN112057851A (zh) | 一种基于多显卡的单帧画面实时渲染方法 | |
JP7376732B2 (ja) | 領域ベースの依存関係によるカーネルの効率的なマルチgpu実行のためのシステム及び方法 | |
US9805439B2 (en) | Memory space mapping techniques for server based graphics processing | |
CN112057852B (zh) | 一种基于多显卡的游戏画面渲染方法和系统 | |
US9041719B2 (en) | Method and system for transparently directing graphics processing to a graphical processing unit (GPU) of a multi-GPU system | |
CN108733356B (zh) | 一种纹理共享方法、计算机设备和存储介质 | |
US20140055470A1 (en) | Host Context Techniques for Server Based Graphics Processing | |
CN117058288A (zh) | 图形处理器及方法、多核图形处理系统、电子装置及设备 | |
CN108595284B (zh) | 一种纹理共享方法、计算机设备和存储介质 | |
CN110362375A (zh) | 桌面数据的显示方法、装置、设备和存储介质 | |
CN113975816B (zh) | 一种基于hook的通过DirectX接口使用显卡的显卡分配方法 | |
EP1591897A2 (en) | Concurrent system applications in a multimedia console | |
CN112799801A (zh) | 一种模拟鼠标指针绘制方法、装置、设备和介质 | |
MXPA02005310A (es) | Sistema de procesamiento de datos, programa de computadora y medio de registro. | |
CN113051032A (zh) | 应用画面处理方法、装置和系统 | |
CN111013144B (zh) | 一种游戏画面绘制渲染方法、装置和移动终端 | |
US20130254704A1 (en) | Multiple Simultaneous Displays on the Same Screen | |
CN114615546A (zh) | 一种视频播放方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |