后处理内核的动态链接和加载的制作方法

文档序号:6463765阅读:139来源:国知局
专利名称:后处理内核的动态链接和加载的制作方法
后处理内核的动态链接和加载背景技术计算机系统通常包括处理设备、存储设备、接口设备、以及输入输出(1/0)设备。在处理视频信号时,计算机系统可以执行后处理(post-processing) 功能,例如影片模式检测、去交错、ProcAmp控制调整、视频縮放、alpha 混合、以及色彩空间转换。可以开发多个独立内核(kemel),其中每一个可 以包括上面列出的一个或多个后处理功能。所述多个内核中的每一个可以 占用存储器中专用的存储单元来读取输入数据以及写入结果。然而,通过 存储器来在不同的后处理功能之间传递数据可能消耗较高的处理器周期。


在附图中,以示例而非限制的方式说明了本文所述的发明。为了说明 的简单和清楚,图中示出的元件不必按比例绘制。例如,为了清楚, 一些 单元的尺寸可能相对于其它元件被夸大。此外,在认为适当的地方,在这 些图中重复参考标记以便表示相应或类似的元件。图l示出了计算机系统的一实施例。图2示出了图1的图形存储器控制中心(GMCH)的一实施例。 图3示出了图2的代码补丁生成器(code patch generator)的一实施例的 操作。图4示出了图2的代码管理器的一实施例的操作。图5示出了图2的内核构造器(kemel composer)的一实施例的操作。
具体实施方式
下述说明书描述了用于动态地链接和加载后处理内核的系统。在下述 说明书中,阐述了许多具体细节,例如逻辑实现、资源划分、或共享、或 重复实现、系统组件的类型和相互关系、以及逻辑划分或集成选择,以便 提供对本发明更透彻的理解。然而,本领域技术人员明白,可以无需这些具体细节来实现本发明。在其它实例中,并未详细示出控制结构、门级电 路以及完整的软件指令序列,以免使本发明难于理解。利用本说明书,本 领域技术人员将能够实现适当的功能性而无需过度实验。在说明书中对"一个实施例"、"一实施例"、"一示例性实施例"的引 用表示,所述的实施例可以包括特定的特征、结构或特性,但是每个实施 例并不是必须包括该特定的特征、结构或特性。此外,这样的短语并不必 然是指同一个实施例。此外,当结合一实施例描述特定的特征、结构或特 性时,应当认为,不管是否明确说明,结合其它实施例来调整这样的特征、 结构或特性,这都属于本领域技术人员的认识范围。本发明的实施例可以用硬件、固件、软件或其任意组合来实现。本发 明的实施例也可被实现为存储在机器可读介质上、可由一个或多个处理器 读取和执行的指令。机器可读介质可以包括用于以机器(例如,计算设备) 可读的形式存储或传输信息的任意机制。例如,机器可读介质可以包括只读存储器(ROM);随机存取存储器 (RAM);磁盘存储媒介;光存储媒介;闪存设备;电、光、声或其它形式 的传播信号(例如,载波、红外信号以及数字信号)。此外,固件、软件、 例程以及指令在本文中可被描述为执行某些动作。然而,应该明白,这样 的描述仅仅是为了方便,并且这样的动作实际上是计算设备、处理器、控 制器以及其它设备执行该固件、软件、例程以及指令的结果。图1中示出了计算机系统100的一实施例。计算系统100可以包括处 理器110、存储器120、芯片组130、 一个或多个I/0设备160、视频图形 阵列(VGA)接口 170以及加速图形端口(AGP)接口 180。处理器110可以管理计算机系统100中的各种资源和处理过程,还可 以执行软件指令。处理器110例如可以包括英特尔⑧微处理器的Pentium 或Itanium⑧系列中的一个或多个微处理器。处理器110可以与芯片组130 通过接口进行连接以从存储器120取得数据和将数据存储到存储器120中。存储器120可以存储数据和指令,可以包括一个或多个不同类型的存 储设备,例如DRAM (动态随机存取存储器)设备、SDRAM (同步DRAM) 设备、DDR(双倍数据速率)、或者在计算机中使用的其它易失性和非易失 性存储设备。I/O设备160可以包括许多设备,例如键盘、鼠标、网络接口设备、 以及某些其它设备。数据单元可以通过总线在芯片组130和I/O设备160 之间传输,其中所述总线包括外围组件互连(PCI)、串行高级技术附件 (SATA)、少针脚型(LPC)、集成设备电路(IDE)、以及某些其它互连技术。
芯片组DO可以包括耦合了处理器110、存储器120、 I/O设备160、 VGA接口 170以及AGP接口 180的一个或多个集成电路或芯片。芯片组 130可以是英特尔⑧芯片组系列中的一个。在一个实施例中,芯片组130 可以包括存储器控制中心143、图形和存储器控制中心(GMCH) 145和I/O 控制中心(ICH) 150。 ICH 150可以提供在耦合到ICH 150的I/O设备160 与处理器110和存储器120之间的接口。例如,ICH 150可以支持例如硬 盘驱动器、软盘驱动器、CD驱动器、调制解调器、键盘、打印机、鼠标、 端点、以太网和SCSI设备。MCH 143可以提供在处理器IIO和存储器130 之间的接口。
在一个实施例中,GMCH145可以处理事务,并在存储器120、ICH150、 处理器110、以及耦合到VGA接口 170和AGP接口 180的设备之间传输 相应的数据。在一个实施例中,GMCH145可以支持后处理内核的动态链 接和加载。在一个实施例中,视频后处理内核可以包括有序的两个或更多 后处理功能,例如影片模式检测、去交错、ProcAmp控制调整、视频縮放、 alpha混合以及色彩空间转换。
例如,第一组合内核(combinedkernel)Kl可以包括相同次序的诸如影 片模式检测、去交错、以及alpha混合这样的后处理功能。第二组合内核 K2可以包括相同次序的诸如影片模式检测、去交错、视频缩放、以及色彩 空间转换这样的后处理功能。在一个实施例中,组合内核K1和K2可以在 相应内核要被调用之前被构造。结果,可以避免用来存储每个静态构造的 内核所需的专用空间。在一个实施例中,形成组合内核所需的后处理功能 可以在编译时被识别并且这些后处理功能可以在运行时被动态链接在一起 以形成组合内核。
图2中描述了支持后处理内核的动态链接和加载的GMCH 145的一实 施例。在一个实施例中,GMCH 145可以包括应用程序210、编程接口 220、 代码补丁生成器230、驱动程序250、以及图形硬件280。在一个实施例中,图形硬件280可以与驱动程序250通过接口迸行连接,以便执行由驱动程 序250所指示的功能。在一个实施例中,图形硬件280可以包括英特尔⑧ 集成图形控制器系列中的一个。
在一个实施例中,应用程序210可以包括多媒体应用程序,计算机系 统IOO的用户可以与其进行交互。在一个实施例中,编程接口 220可以包 括一个或多个例程,应用程序210可以使用所述例程来与由底层操作系统 提供的低级服务进行交互。
在一个实施例中,编程接口 220可以提供在应用程序210和代码补丁 生成器230以及驱动程序250之间的编程接口。在一个实施例中,编程接 口 220可以基于从应用程序210接收到的输入值,向驱动程序250提供后 处理功能请求。在一个实施例中,编程接口 220可以包括微软⑧DxVA (Direct X视频加速)编程接口 。
在一个实施例中,代码补丁生成器230可以将每个组件内核 (component kemel)静态地编译成二进制代码(binaiy)、以及可帮助在运行时 进行动态链接的辅助代码补丁。在驱动程序250建立时,所述二进制代码 和辅助代码补丁可以被加载到驱动程序250的内核构造器258中。在一个 实施例中,代码补丁生成器230可以指定I/O区,其中第一组件内核可以 使用该I/0区来读取和写入数据。然而,代码补丁生成器230可以不指定 可以与第一组件内核被链接在一起的其它组件内核,并且这样的组件内核
链接可以发生在运行时。
驱动程序250可以将诸如应用程序210这样的上层通过接口连接到图 形硬件280。在一个实施例中,驱动程序250可以包括代码管理器254和 代码构造器258。在一个实施例中,驱动程序250可以包括英特尔⑧图形
驱动程序系列中的一个。
在一个实施例中,代码管理器254可以从编程接口 220接收要求取得 指定的组合内核的取得请求。代码管理器254可以确定指定的组合内核是 否存在于由代码管理器254支持的数据库中。如果指定的内核存在于该数 据库中,则代码管理器254可以向编程接口 220发送信号,以指示指定的 组合内核的存在性。如果指定的组合内核不存在,则代码管理器254可以 向代码构造器258发送要求构造该指定的内核的请求。在一个实施例中,代码管理器254也可以确定构造该指定的组合内核所需的若干组件内核。
在一个实施例中,响应于接收到为新构造的指定的组合内核分配空间 的请求,代码管理器254可以分配空间以存储新构造的指定的组合内核。 在一个实施例中,响应于接收到指示新构造的指定的组合内核已被构造的 信号,代码管理器254可以存储该新构造的指定的组合内核并且还可以分 配唯一标识符给该新构造的指定的组合内核。在一个实施例中,代码管理 器254还可以通过删除寿命过久的组合内核来管理用于存储组合内核的空 间。
在一个实施例中,代码构造器258可以接收要求构造指定的组合内核 的信号。代码管理器258也可以接收构造该指定的组合内核所需的组件内 核。在一个实施例中,代码构造器258可以确定存储新构造的指定的组合 内核可能需要的空间,并且可以发送要求分配该空间的请求。
在一个实施例中,代码构造器258可以通过确定指定用于每个组件内 核的I/O寄存器区来构造组合内核。在一个实施例中,代码构造器258可 以取得组件内核的二进制文件并将其复制到所分配的空间。代码构造器 258也可以应用相关联的代码补丁来修补二进制文件,以便从输入寄存器 区读取数据并将输出写到输出寄存器区。代码构造器258可以发送指示所 指定的组合内核已被构造的信号。
图3中示出了代码补丁生成器230的操作的一实施例。在方框310, 代码补丁生成器230可以对组件内核进行编译以生成二进制文件、以及可 帮助在运行时进行链接的辅助代码补丁。在一个实施例中,代码补丁生成 器230可以包括Gen4汇编程序(assembler),其可以使用'.declare'句法。 在一个实施例中,Gen4汇编程序使用'.declare'句法来标识从前一个内 核读取数据的指令以及向后一个内核写入数据的指令。在一个实施例中, 对于输入和输出区的\declare,句法可以等于
.declareINBase=r4,Elementsize=4,Type=d,Width(8;),Height(;4)PP—IN .declareOUTBase=r8,Elementsize=4,Type=d,Width(8),Height(;4) PP—OUT 在一个实施例中,PP—IN和PP一OUT指示,'.declare'被用来访问前 一个内核所生成的数据以及写数据区,以用于写入可由后一个内核读取的 输出数据。直到运行时之前,PPJN和PPJ)UT的内容可以被设置为默认值。在运行时确定的实值可以被用于配置PP一IN和PP一OUT的内容。在一 个实施例中,Gen4汇编程序可以在生成辅助代码补丁之前跟踪带有PP—IN 和PP—OUT的'.declare'。
在方框350,代码补丁生成器230可以将二进制代码和辅助代码补丁 加载到驱动程序250。
图4中示出了代码管理器254的操作的一实施例。在方框410,代码 管理器254可以接收要求取得组合内核K的第一请求。在方框420,代码 管理器254可以检查组合内核K是否存在,如果组合内核K存在,则控制 传到方框425,否则传到方框430。
在方框425,代码管理器可以增加所有现存组合内核的寿命。这样的 方法可以使得能够识别出最近使用的组合内核。在一个实施例中,具有较 小寿命值的组合内核是最近使用的组合内核。
在方框430,代码管理器254可以确定是否要收回内核空间,如果要 收回给内核空间,则控制传到方框435,否则传到方框440。
在方框435,代码管理器254可以寿命大于门限寿命值的组合内核。 在一个实施例中,代码管理器254可以将每个组合内核的寿命与门限寿命 值进行比较,以确定组合内核的寿命是否大于门限寿命值。
在方框440,代码管理器254可以确定生成组合内核K所需的选定的 组件内核。在方框450,代码管理器254可以发送要求构造组合内核K的 第二请求以及所选定的组件内核。在一个实施例中,代码管理器可以以布 尔数组的方式将第二请求发送给代码构造器258。例如,该布尔数组可以 等于bool component—kernels[list of component kernels]。如果组件内核布尔
值为真,则可选定相应的组件内核。
在方框460,响应于接收到来自代码构造器258的第一信号,代码管 理器254可以分配空间以存储组合内核K。在方框470,代码管理器254 可以发送第二信号,其指示用于存储组合内核K的空间已被分配。
在方框480,代码管理器254可以检查是否接收到指示该组合内核已 被构造的第三信号,如果组合内核K已被构造,则控制传到方框490,否 则传到方框480。
在方框490,代码管理器254可以缓存或存储组合内核K以及分配给该组合内核K的唯一标识符。图5中示出了代码构造器258的操作的一实施例。在方框510中,代 码构造器258可以接收要求生成组合内核K的第一请求。在方框520,代 码构造器258可以确定存储组合内核K所需的空间。在方框530,代码构造器258可以发送要求为组合内核K分配空间的 第一信号。在方框540,在接收到第二信号后,代码构造器258可以确定 为生成组合内核K而选定的组件内核的次序,其中,所述第二信号指示存 储组合内核K所需的空间已被分配。在方框550,代码构造器258可以确定所选定的组件内核使用的输入 和输出寄存器区。在方框560,代码构造器258可以取得所选定的组件内 核的二进制代码。在方框570,代码构造器258可以将二进制代码复制到所分配的空间。 在方框580,代码构造器258可以应用代码补丁来修补二进制代码,以便 从输入寄存器区读取输入数据以及将输出数据写入输出寄存器区。在方框590,代码构造器258可以发送第三信号,该信号指示组合内 核K已被构造。这样的信号可以被发送到代码管理器254。已经参照示例性实施例描述了本发明的特定特征。然而,本说明书并 不是要被限制性地进行解释。示例性实施例的各种变型以及本发明的其它 实施例,对于本发明所属领域的技术人员来说都是显而易见的,它们均被 认为是落入本发明的实质和范围之内。
权利要求
1、一种方法,包括在代码补丁生成器中生成多个组件内核,其中,所述多个组件内核将要在运行时被链接,确定一组合内核是否存在于代码管理器中,以及如果所述组合内核不存在于所述代码管理器中,则在代码构造器中创建所述组合内核,其中,所述组合内核是根据所述多个组件内核中选定的组件内核来创建的。
2、 如权利要求l所述的方法,其中,生成所述多个组件内核还包括 编译所述多个组件内核,以生成二进制代码以及代码补丁,所述代码补丁在运行时从前一个内核读取数据并向后一个内核写入数据,以及 将所述二进制代码和所述代码补丁加载到驱动程序中。
3、 如权利要求2所述的方法,其中,创建所述组合内核还包括 确定存储所述组合内核所需的存储器,标识由所述多个组件内核中所选定的组件内核使用的输入和输出寄存 器区,以及应用所述代码补丁,以指派所述二进制代码从所述输入寄存器区读取 数据以及向所述输出寄存器区写入数据。
4、 如权利要求3所述的方法,其中,确定用于存储所述组合内核的存 储器还包括向所述代码管理器发送信号,以及确定生成所述组合内核所需的所述组件内核的次序。
5、 如权利要求3所述的方法,其中,创建所述组合内核还包括 取得所述组件内核的二进制代码, 将所述二进制代码复制到所述空间,以及在应用所述代码补丁以指派所述二进制代码从所述输入寄存器区读取 数据以及向所述输出寄存器区写入数据之后,指示所述组合内核已被构造。
6、 如权利要求4所述的方法,其中,确定所述组合内核是否存在还包括如果所述组合内核还不存在,则向所述代码构造器发送请求,以要求 生成所述组合内核。
7、 如权利要求5所述的方法,还包括接收由所述代码构造器发送的信号,其中,所述信号将要使所述代码 管理器分配用于存储所述组合内核的存储器,分配存储所述组合内核所需的所述存储器,以及在所述组合内核由所述代码构造器创建之后,存储所述组合内核和与 所述组合内核相关联的唯一标识符。
8、 一种装置,包括代码补丁生成器,用于生成多个组件内核,其中,所述多个组件内核 将要在运行时被链接,耦合到所述代码补丁生成器的代码管理器,其中,所述代码管理器用 于确定一组合内核是否存在于所述代码管理器中,以及耦合到所述代码管理器的代码构造器,用于创建所述组合内核,其中, 如果所述组合内核不存在于所述代码管理器中,则根据所述多个组件内核 中选定的组件内核来创建所述组合内核。
9、 如权利要求8所述的装置,其中,所述代码补丁生成器用于编译所述多个组件内核以生成二进制代码以及代码补丁,并将所述二进制代码和 所述代码补丁加载到驱动程序中,所述代码补丁在运行时从前一个内核读 取数据并向后一个内核写入数据。
10、 如权利要求9所述的装置,其中,所述代码构造器用于确定存储所述组合内核所需的存储器,标识由所述多个组件内核中所选定的组件内核使用的输入和输出寄存 器区,以及应用所述代码补丁,以指派所述二进制代码从所述输入寄存器区读取 数据以及向所述输出寄存器区写入数据。
11、 如权利要求io所述的装置,其中,所述代码构造器用于向所述代码管理器发送信号以及确定生成所述组合内核所需的所述组件内核的次 序。
12、 如权利要求10所述的装置,其中,所述代码构造器用于取得所述 组件内核的二进制代码,将所述二进制代码复制到所述空间,以及在应用 所述代码补丁以指派所述二进制代码从所述输入寄存器区读取数据以及向 所述输出寄存器区写入数据之后,指示所述组合内核已被构造。
13、 如权利要求ll所述的装置,其中,所述代码管理器用于如果所述 组合内核还不存在,则向所述代码构造器发送请求,以要求生成所述组合 内核。
14、 如权利要求12所述的装置,其中,所述代码管理器用于在接收到 由所述代码构造器发送的信号之后分配用于存储所述组合内核的所述存储 器,以及在所述组合内核由所述代码构造器创建之后,存储所述组合内核 和与所述组合内核相关联的唯一标识符。
15、 一种包括多个指令的机器可读介质,所述指令响应于被执行而使 计算设备在代码补丁生成器中生成多个组件内核,其中,所述多个组件内核将 要在运行时被链接,确定一组合内核是否存在于代码管理器中,以及 如果所述组合内核不存在于所述代码管理器中,则在代码构造器中创建所述组合内核,其中,所述组合内核是根据所述多个组件内核中选定的 组件内核来创建的。
16、 如权利要求15所述的机器可读介质,其中,生成所述多个组件内核还包括编译所述多个组件内核,以生成二进制代码以及代码补丁,所述代码 补丁在运行时从前一个内核读取数据并向后一个内核写入数据,以及 将所述二进制代码和所述代码补丁加载到驱动程序中。
17、 如权利要求16所述的机器可读介质,其中,创建所述组合内核还包括确定存储所述组合内核所需的存储器,标识由所述多个组件内核中所选定的组件内核使用的输入和输出寄存 器区,以及应用所述代码补丁,以指派所述二进制代码从所述输入寄存器区读取 数据以及向所述输出寄存器区写入数据。
18、 如权利要求n所述的机器可读介质,其中,确定用于存储所述组合内核的存储器还包括-向所述代码管理器发送信号,以及 确定生成所述组合内核所需的所述组件内核的次序。
19、 如权利要求17所述的机器可读介质,其中,创建所述组合内核还 包括取得所述组件内核的二进制代码, 将所述二进制代码复制到所述空间,以及 在应用所述代码补丁以指派所述二进制代码从所述输入寄存器区读取 数据以及向所述输出寄存器区写入数据之后,指示所述组合内核已被构造。
20、 如权利要求19所述的机器可读介质,还包括接收由所述代码构造器发送的信号,其中,所述信号将要使所述代码 管理器分配用于存储所述组合内核的存储器,分配存储所述组合内核所需的所述存储器,以及在所述组合内核由所述代码构造器创建之后,存储所述组合内核和与 所述组合内核相关联的唯一标识符。
全文摘要
计算机系统可以生成多个组件内核,这些组件内核将在运行时被链接。响应于要求取得组合内核K的第一请求,系统可以确定是否存在该组合内核K。如果组合内核K还不存在,则系统可以在运行时根据多个组件内核中选定的若干组件内核来构造该组合内核。
文档编号G06F9/445GK101320332SQ20081011038
公开日2008年12月10日 申请日期2008年6月4日 优先权日2007年6月5日
发明者G-Y·鲁, J·H·洪, M·卢基扬诺夫, N·Y·杨, P·刘, X·何, X·张 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1