在并行的多个客户端之间的gpu资源的分配的制作方法

文档序号:6360835阅读:227来源:国知局
专利名称:在并行的多个客户端之间的gpu资源的分配的制作方法
技术领域
本发明总的来说涉及应用程序的服务器端渲染,更详细地说,涉及一种基于多组渲染参数同时为多个客户端渲染多个应用程序的服务器。
背景技术
客户端-服务器架构一般来说是分布式计算架构,该架构在服务器(可以被认为是“服务提供者”)和客户端(可以被认为是“服务请求者”或“服务消费者”)之间划分任务或工作负荷。服务器和客户端常常会通过计算机网络连接,并且各种数据可以通过计算机网络在独立的服务器和独立的客户端之间双向传输。服务器通常具有比客户端更多的资源和更好的性能。服务器可与一个或多个客户端共享其资源,例如为客户端执行某些任务(即给客户端提供服务)。由于服务器典型地具有比客户端更多的资源,因此服务器能比客户端更快地完成任务,特别是有资源需求的任务。服务器和客户端之间所交换的数据可以由任何合适的数据格式来表征,并利用任何合适的通信协议来传输。例如,当在服务器上为客户端执行某一应用程序时,该应用程序的输出可以使用结构化文档来表征,诸如超文本标记语言(HTML)文档或可扩展标记语言(XML)文档。服务器可以通过在服务器和客户端之间的超文本传输协议(HTTP)连接将包括表征应用程序输出的数据的HTML或XML文档传输给客户端。当接收到HTML或XML文档时,客户端就可以消费该文档,并利用诸如在该客户端上被执行的网络浏览器中的该HTML或XML文档本地渲染应用程序的输出。

发明内容
本发明总的来说涉及应用程序的服务器端渲染,更详细地说,涉及一种基于多组渲染参数同时为多个客户端渲染多个应用程序的服务器。在一个实施例中,计算机系统托管多个应用程序实例,每个应用程序实例对应于一个远程客户端应用程序。计算机系统保持与为其托管应用程序实例的每个远程客户端应用程序网络连接。计算机系统在至少两个远程客户端应用程序之间分配计算机系统中图形处理单元的资源。该计算机系统利用其图形处理单元的资源同时渲染对应于所述至少两个远程客户端应用程序的应用程序实例的图形输出。而且,该计算机系统通过相应的网络连接将渲染后的图形输出传输给所述至少两个远程客户端应用程序。在一个实施例中,第一计算机系统访问多组渲染参数,其中,第一计算机系统与多个第二计算机系统相连;多组渲染参数中的每一组对应于多个第二计算机系统中特定一个第二计算机系统;第一计算机系统包括用于存储图像的渲染目标;并且该渲染目标由多个第二计算机系统共享。第一计算机系统基于多组渲染参数为多个第二计算机系统并行渲染多个图像,其中,基于与多个第二计算机系统中特定一个第二计算机系统相对应的多组渲染参数中的特定一组渲染参数,为所述多个第二计算机系统中特定一个第二计算机系统渲染多个图像中的每一个图像并存储在渲染目标中。而且,第一计算机系统将所述多个图像中的每一个图像传输给已经为其渲染该图像的所述第二计算机系统中的特定一个第二计算机系统。本发明的这些和其他的特征、方面和优点将在以下的详细说明中结合附图地加以详细阐明。


图I示出了用于在并行的多个客户端之间分配服务器资源的一个示例性的客户端-服务器系统;图2示出了被划分成多个渲染目标单元的服务器渲染目标的一个例子;图3示出了服务器同时为多个客户端实施多个渲染的方法;图4示出了一示例性网络环境;图5示出了一示例性计算机系统。
具体实施例方式下面将参考附图中所示的一些实施例对本发明进行详细描述。为了更加透彻地理解本发明,在以下描述中,阐述了大量的具体细节。然而,本领域的技术人员显而易见的是,在部分或全部没有这些具体细节的情况下,本发明也可以实现。在其他例子中,为了避免不必要地使本发明难以理解,没有详细描述熟知的处理步骤和/或结构。另外,虽然结合特定的实施例对本发明进行了阐述,但应理解,本说明书并非用于限制所述实施例的公开内容。相反地,本说明书旨在涵盖各种可以包括在如本发明所附权利要求书所限定的公开内容的精神和范围之内的各种替换、修改或等同替换。客户端-服务器架构使服务器能够与一个或多个客户端共享其资源。这种架构具有许多优点。例如,由于服务器比客户端典型地具有更多的资源(例如,处理器或内存)和更好的性能,因此与客户端所能做到的相比,服务器可以更快地完成任务。当任务为资源需求型或当客户端仅有有限数量的资源时,这种性能差异特别明显。同时,当服务器为客户端或代表客户端执行任务时,可以释放客户端的资源以执行其他任务,诸如需要在客户端本地执行的那些任务(例如,与客户端用户互动)。可以适合在服务器上完成的一种任务可以是由服务器托管的作为视频输出传输给客户端的应用程序的渲染。在计算机绘图中,渲染可以被认为是通常利用计算机程序从模型生成图像的过程。模型通常是三维(3D)物体的描述并可以以严格定义的语言或数据结构来表征。模型可以包含几何形状、视点、纹理、照明效果、着色、动作以及其他适当类型的信息。由模型渲染成的图像可以是数字图像或光栅图形图像,该图像可以由像素的集合形成。本发明将渲染的概念扩大到生成表征任何应用程序的任何输出的图像。可基于任何数据完成渲染,所述数据包括二维(2D )数据和三维(3D )数据。除了基于3D模型生成图像之外,特定的实施例可以渲染表征如下所述应用程序的输出的图像,即,所述应用程序诸如(例如但不限于)网络浏览器应用程序,文字处理应用程序,电子表格应用程序,多媒体应用程序,科学和医学应用程序以及游戏应用程序。由于渲染过程经常是资源需求型的,特别是当渲染的图像具有高分辨率和高品质时,其可能是非常计算密集性的,因此渲染可以是一种适合在服务器上执行的任务。在过去,将一个三维模型渲染成单个2D图像将花费老式计算机系统数小时或数天的时间。随着计算机硬件、特别是专门为计算机绘图应用程序(例如,游戏,多媒体,娱乐或绘图)所设计的计算机硬件的进步和发展,现在的计算机系统能够在几秒或几毫秒内渲染每个图像。事实上,将模型渲染成单个图像通常并不占用服务器的全部可用资源。为了更好地利用服务器的可用资源,在特定的实施例中,服务器可以为多个客户端同时执行多个渲染(例如,将多个3D模型同时渲染成多个2D图像),并且为不同的客户端执行多个渲染中的每一个。在特定的实施例中,服务器的可用资源可以被分配给多个客户端且由多个客户端共享。因此,客户端中的每个客户端被分配有服务器可用资源中的一部分。更具体地说,在特定的实施例中,服务器的图形处理单元(GPU)在客户端之间共享。为一个特定客户端执行的多个渲染中的每一个可以使用专门分配给该客户端的那部分资源。在特定的实施例中,作为渲染过程的最终输出的每个渲染图像可以被传输给对应的为其获取渲染图像的客户端。图I示出了一个示例性的系统,其中,单个服务器120同时为多个客户端130执行多个渲染。需要注意的是,为了简明起见,图I中仅示出了四个客户端130A,130B,130C,130D。实际上,服务器可以为任意数量的客户端同时执行渲染,而且对服务器在任何时候支持客户端的数量在理论上并没有限制。类似地,为了简明起见,图I中仅示出了一个GPU121和一个CPU122。实际上,服务器可以具有任意数量的GPU和CPU。在特定的实施例中,服务器120通过单独的连接150与每一个客户端130连接。在特定的实施例中,服务器120和客户端130之间的连接150可以为通过计算机网络的网络连接,诸如,例如并且不限于,因特网,内联网,局域网(LAN),广域网(WAN),无线网络,或者两个或多个此类计算机网络的组合。在特定的实施例中,每个网络连接150可以为传输控制协议(TCP)连接,用户数据报协议(UDP)连接,或者任何其他合适的连接。在特定的实施例中,服务器120可以具有多个TCP网口 124,并且每个客户端130可以通过单独的TCP连接150连接到不同的TCP网口 124上。例如,客户端130A可以通过TCP连接150A连接到服务器120的TCP网口 124A上。在特定的实施例中,通过一个对应的连接150,可以在服务器120和每个客户端130之间实现双向数据交换。例如,服务器120和客户端130A可以通过连接150A双向地交换数据。数据可以为任何合适的格式。例如,服务器120可以以视频流的形式将数据传输到客户端130 ;并且每一个客户端130可以将数据传输给服务器120。服务器120和客户端130之间的通信可以采用任何合适的协议。例如,假设为客户端130A在服务器120上执行应用程序实例131A。在服务器120上执行的应用程序实例131A的渲染输出可以以视频流的形式从服务器120传输到客户端130A,其中每一个渲染图像将应用程序实例131A的输出表征为视频流的一个特定的帧。客户端130A接收的输入,特别是那些可以导致在服务器120上执行的应用程序实例131A改变状态的输入,可以从客户端130A传输给服务器120。在特定的实施例中,服务器120可以具有一个或多个中央处理单元(CPU)122以及一个或多个图形处理单元(GPU)121。CPU和GPU在计算机领域内是公知的。简要地说,CPU是计算机系统中执行计算机的功能和计算机程序的指令的那部分。GPU是一种专门的处理器,其从微处理器(例如CPU)卸载图形渲染。一般而言,GPU能非常有效地处理计算机图形,并且GPU高度并行的结构使其对于一些复杂算法(例如与图形相关的算法)比通用CPU更加有效。在特定的实施例中,GPU121可以是视频卡的一部分或者位于服务器120的主板上。在特定的实施例中,GPUl21包括渲染目标。在特定的实施例中,渲染过程将作为一 个或多个图像的一个或多个应用程序的输出渲染成渲染目标。在特定的实施例中,经渲染的2D图像可以存储在GPU121的渲染目标中。在特定的实施例中,渲染目标可以为帧缓冲器或者GPU121内的任何合适类型的内存或存储器。图2示出了示例性的GPU (例如GPU121)的渲染目标200。在此例子中,渲染目标200为在GPU121中的内存,诸如帧缓冲器。在特定的实施例中,渲染目标可以存储表征一个或多个应用程序的渲染输出的高达256兆像素。因此,渲染目标能被分成例如由I兆像素区块(1024像素X 1024像素)构成的一个16X16的网格。渲染目标还能被划分以适应其他显示宽高比。在特定的实施例中,渲染目标可以被分成多个部分。在图2中,渲染目标200以4X4的网格被分成16个部分,每个部分可以被称为渲染目标200的一个单元或一个渲染目标单元。同样,将渲染目标200分成16个渲染目标单元只是为了简化后续的说明。实际上,渲染目标可以被分成任意数量的单元,并且对渲染目标到底可以被划分成多少个渲染目标单元在理论上没有限制。类似地,每一个渲染目标单元的大小和尺寸可以根据渲染目标的大小和尺寸以及渲染目标所被划分成的渲染目标单元的数量变化。例如,每个渲染目标单元可以为256像素X 256像素,512像素X 512像素,或1024像素X 1024像素。当然,渲染目标单元不必都具有相同的宽度和高度。例如,渲染目标单元可以为256像素X512像素或512像素X 256像素。在特定的实施例中,服务器120的GPU121的渲染目标200可以在四个客户端130之间被分配,使得每个客户端130被分配一个或多个渲染目标单元。给一个特定的客户端130分配多少渲染目标单元可以取决于那个客户端130的实际需求和系统架构。在特定的实施例中,特定客户端130的显示器的分辨率、尺寸和取向可以决定给那个客户端130分配多少个渲染目标单元。例如,假设图2中的每个渲染目标单元为1024像素X 1024像素。进一步地假设客户端130A为具有较低分辨率的显示器(例如1024像素X768像素)的笔记本电脑。在此情况下,单个渲染目标单元可以具有足够的存储空间来储存1024像素X768像素或更小的渲染图像。因此,客户端130A可以被分配一个渲染目标单元(例如渲染目标单元211)。另一方面,假设客户端130B是具有1920像素X 1680像素显示器的台式电脑。在这种情况下,可能需要四个渲染目标单元来存储1920像素X1680像素或更小的图像。因此,客户端130B可以被分配四个渲染目标单元(例如渲染目标单元212,213,222和223)。在特定的实施例中,分配给特定客户端130的渲染目标单元的取向可以取决于该客户端130的显示器的尺寸和取向。例如,假设客户端130C具有细长型显示器,其中该显示器的宽度远小于该显示器的高度。在这种情况下,可将同列中的三个渲染目标单元221,231,241分配给客户端130C,以便支持其细长型显示器(即渲染目标单元221,231,241 —起模拟客户端130C的显示器的尺寸和取向)。最后,假设客户端130D具有高分辨率显示器,从而将六个渲染目标单元232,233,234,242,243,244分配给该客户端130D,以便存储如此高分辨率的渲染图像。当然,不一定需要在任意给定时间内将全部可用渲染目标单元分配给各个客户端。有时,可以在某些渲染中不分配若干渲染目标单元(例如渲染目标单元214,224),而是在过后将其分配给客户端130。类似地,已经被分配给特定客户端130的渲染目标单元当它们不再被需要时(例如当该特定客户端130与服务器120断开连接)可被释放出来。在特定的实施例中,每个客户端130可以与一个或多个计算机程序相关联,该一个或多个计算机程序也被称为应用程序。为了简化说明,在图I中,显示出与每个客户端130相关联的单独一个应用程序131。例如,应用程序131A与客户端130A相关联。然而,当多个应用程序与每个客户端130相关联时,适用同样的概念。在特定的实施例中,服务器120被配置成为一个或多个客户端130托管一个或多个应用程序131的一个或多个实例。将应用程序131的实例的渲染输出传输到对应的客户端130以呈现给客户端130的一个或多个用户。在特定的实施例中,与客户端130关联的应用程序131的实例可以在服务器120上为客户端130运行。在服务器120上运行的应用程序131的实例的输出可以由服务器120渲染为图像。在特定的实施例中,应用程序131的实例的渲染输出可以被编码为视频数据并作为视频流传输到对应的客户端130。当接收到表征其对应应用程序131的渲染输出的视频流时,每个客户端130可以解码视频数据并显示对应应用程序131的渲染输出。例如,在服务器120上为客户端130A运行应用程序实例131A。应用程序实例131A的输出可以通过服务器120被渲染为一个或多个图像。应用程序实例131A的渲染输出可以被编码为视频流并传输给客户端130A。在接收到该视频流时,客户端130A可以解码该视频流以重新得到应用程序实例131A的渲染输出并将该输出显示于客户端130A上。在特定的实施例中,每个客户端130可以包括一个或多个CPU (未示出)以及一个或多个GPU (未示出)。在特定的实施例中,每个客户端130可以将视频流(S卩,编码的视频帧)装入其GPU的内存中并解码该编码的视频数据以显示对应应用程序131的渲染输出。因为计算机程序131的实例在客户端130上运行,所以可能需要执行各种渲染。例如,假设应用程序实例131A是一个游戏应用程序。该游戏的视频可以每秒60帧的速度进行,并且每一帧可能需要将游戏场景的3D模型新渲染成图像。因此,应用程序实例131A可能需要每秒60次的渲染。假设应用程序实例131B是一个动画电影,并且视频以每秒30帧的速度进行。同样,每一帧可能需要将动画场景新渲染成图像。因此,应用程序实例131B可能需要每秒30次的渲染。另外,对于每个应用程序131的实例,还可以有一组用于指明如何将该程序实例131的3D模型渲染为图像的渲染参数。在特定的实施例中,渲染参数可以包括(例如并且不限于)要渲染的模型,视口或镜头角度,灯光,纹理,阴影或图像分辨率。另外,渲染参数可以在帧之间改变,由此在渲染之间也改变。例如,在诸如应用程序实例131A的游戏应用程序的情况下,随着客户端130A的游戏者移动游戏场景,游戏场景的3D模型中的对象以及镜头角度,灯光和阴影可以变化。因此,每一个渲染可以具有对应于当前游戏状态的一组不同的渲染参数来指明该渲染的例如特定的场景,视点位置,镜头角度,照明效果,或阴影。在特定的实施例中,服务器120可以保持当前连接到服务器120上的每个客户端130的一个不同的渲染参数组123。例如,渲染参数组123A对应于客户端130A。每组渲染参数123可以从计算机程序131的对应实例中获得,并且描述了对于该计算机程序131的实例如何执行渲染。例如,渲染参数组123A可以包括描述了对于应用程序实例131A如何执行渲染的渲染参数并且可以基于应用程序实例131A的当前状态进行更新。有时,多个客户端130可以执行相同计算机程序的多个实例并且还具有不同的渲染参数123。例如,假设客户端130A和130D运行同一游戏应用程序的两个实例。在客户端130A和130D的两个游戏者可以独自地或互动式地玩同样的游戏(例如在同一游戏中充当两个不同的角色)。如果两个游戏者独自地玩同样的游戏,在特定时间,他们可能处于游戏的不同阶段,因此,他们在客户端130A和130D的显示器上所看到的图像是不同的。如果两个游戏者互动式地玩同样的游戏,在特定时间,即使两个游戏者都处于同样的游戏场景中,他们也可能从不同的位置和不同的角度观看游戏场景。同样,两个游戏者在客户端130A和130D的显示器上也可能看到不同的图像。不论何种情况,因为两个游戏者在任意的给定时间看到的图像不同,所以渲染参数在相同的游戏应用程序的两个实例之间存在差异。在一个给定的渲染进程中,像素着色器(和/或其他渲染功能)按一组渲染参数操作,该组渲染参数中还定义了渲染图像的视点或类似参数。在特定的实施例中,在单次渲染进程中,服务器120可以分别基于四组渲染参数123为在客户端130上运行的四个程序实例131同时执行四次渲染。在特定的实施例中,GPU121可以执行实际的渲染功能。在特定的实施例中,每一次渲染为每一个客户端同时输出一帧渲染图像。在特定的实施例中,四幅渲染图像中的每一幅都被存储在GPU121内渲染目标200的已被分配给对应客户端130的特定部分中。例如,基于渲染参数组123A,为在客户端130A上运行的应用程序实例131A执行第一渲染,并且将第一渲染图像存储在渲染目标单元211中。基于渲染参数组123B,为在客户端130B上运行的应用程序实例131B执行第二渲染,并且将第二渲染图像存储在渲染目标单元212、213、222、223中。基于渲染参数组123C,为在客户端130C上运行的应用程序实例131C执行第三渲染,并且将第三渲染图像存储在渲染目标单元221,231,241中。基于渲染参数组123D,为在客户端130D上运行的应用程序实例131D执行第四渲染,并且将第四渲染图像存储在渲染目标单元232,233,234,241,242,243,244中。在特定的实施例中,在单次编码过程中,服务器120可以对存储于渲染目标200中的四个渲染图像并行编码。在特定的实施例中,GPU121可以执行实际的编码功能。例如,每一个渲染图像可以被编码为不同视频流中的单个帧。在特定的实施例中,服务器120此后可以分别将现在已被编码在四段视频流中的四个渲染图像传输到四个客户端130。更具体地说,第一渲染图像可以被编码为第一视频流中的一帧并被传输到客户端130A。第二渲染图像可以被编码为第二视频流中的一帧并被传输到客户端130B。第三渲染图像可以被编码为第三视频流中的一帧并被传输到客户端130C。第四渲染图像可以被编码为第四视频流中的一帧并被传输到客户端130D。当接收到对应的视频流时,每一个客户端130可以解码视频流并且在其显示器上显示渲染图像。在特定的实施例中,服务器120可以实现视频编解码器功能。视频编解码器可以用于对渲染图像进行编码,所述渲染图像表征在服务器120上运行的应用程序131的实例的输出。在特定的实施例中,视频编解码器访问存储于渲染目标200中的渲染图像并将图像划分成宏块。在一种实施方案中,每个宏块的大小为16像素X 16像素。如下所述,在一些实施方案式中,可以在8X8分区上执行离散余弦变换(DCT)操作。因此,由于4 :2 :0缩减像素采样,每个宏块包括四个8X8亮度分区,四个4X4Cb分区,以及四个4X4Cr分区。然而,也可以采用其他的宏块尺寸。然后,视频编解码器如下所述地对每个宏块的亮度和色度分区执行一定的变换和量化操作。这些操作可以串行地或并行地进行。如果在GPU上执行编码操作,对宏块的处理能够以并行的方式完成,从而减少处理时间并增大吞吐量。编解码器给每个宏块配备一个2D平面,其可最佳地模拟宏块像素的亮度值。该平面由方程式z=ax+by定义,其中a和b定义了该平面的梯度参数。然后,编解码器基于该平面的梯度参数调整宏块像素的亮度值。在一种实施方案中,对于每一个像素,编解码器从这个位置上的像素值中减去平面方程式的对应值。在概念上,由以下方程式定义经调整的像素(x,y) =像素(x,y)-z。在一种实施方案中,编解码器并不调整色度分区的值。然后,编解码器将DCT应用于宏块。在一种实施方案中,编解码器将DCT分别应用到8 X 8像素的四个亮度分区和八个4 X 4色度分区。编解码器此后在对应于每个亮度分区和每个色度分区的每个DCT系数集合的DC分量上应用2X2阿达玛(Hadamard)变换,以找出DC系数值之间的关联。在可替代的实施方案中,编解码器动态地确定分区的大小。例如,编解码器可以基于每一个分区选择的信息率(rate)和失真,在4X4,8X8,16X 16分区中动态地选择。编解码器将用于一个宏块的DCT系数重新排序成一维(ID)矩阵。在一种实施方案中,以曲折排序扫描四个亮度分区的DCT系数,然后使DCT系数交错,从而使DC分量值和其他对应DCT的分量值一起形成组。在一种实施方案中,亮度分区相对于色度分区单独编码。在一种实施方案中,色度分区以与亮度通道相似的方式被交错在一起。在其他实施方案中,可使用曲折重排序(zigzag re-ordering)的替代方法。编解码器还采用例如率失真优化法量化ID矩阵中的DCT系数,率失真优化法是一种基于每种选择的最终成本(需要编码的位数)和与每种选择相关联的错误或失真评价是否上下取舍到最接近的整数或取舍到零的量化过程。在一种实施方案中,率失真优化法基本上应用视频质量测试方法,来测量与源的偏差以及每个可能的判定结果的位成本。通过位成本乘以拉格朗日算符(Lagrangian)以数学方法精确地计算出位,其中拉格朗日算符是一个表征位成本和特定质量水平的质量之间的关系的值。为了最大化峰值信噪比(PSNR)视频质量测试方法,可以以均方误差来衡量与源的偏差。位成本的计算可以通过使每个待测试的视频块通过熵编解码器以测量其实际位成本来完成。 在一种实施方案中,通过从宏块的DC系数中减去DC预测值,编解码器于是计算出每个宏块的DC预测值并且基于DC预测值调整每个宏块的DC系数。在一种实施方案中,DC预测值X基于相邻区块的DC系数。换言之,区块的DC预测值X是基于区块a与b的DC系数之和再减去区块c的DC系数值。在一种实施方案中,在亮度和色度通道上执行DC预测
值调整。编解码器然后将量化的系数编码到每个区块的保留内存空间中。在一种实施方案中,编解码器采用变长编码的形式压缩每个区块的量化系数。在一种实施方案中,编解码器先采用游程编码(RLE)然后再采用霍夫曼(Huffman)编码。在对每个宏块的量化DCT系数编码后,产生宏块的被编码的位和位长。在获知位长信息后,编解码器就能执行并行前缀求和,以在最终输出位流中获得每个宏块的开始位置。在一种实施方案中,通过以类似光栅的顺序写入每个宏块的数据,编解码器于是使GPU121将编码数据写入将缓冲到主系统内存中的输出流上。在一种实施方案中,通过并行的处理操作,由GPU121将数据写入CPU内存。例如,编解码器可以在一个集中操作中使数据被写入一个或多个输出流。例如,具有写数据字(诸如I或2个字节)任务的步骤或功能可利用每个宏块的开始位位置以及在该帧的输出流中的数据字的位置,来确定从哪个保留内存位置访问数据位以创建数据字并将其写入内存。集中操作允许利用GPU121的资源在并行处理操作中写输出,由此进一步增加了吞吐量。例如,在一种实施方案中,可以定义一个功能,即将输出流被写入其中的内存中的数据或机器字的位置接收为输入。运用该功能可基于数据或机器字的位置以及宏块的开始位值从一个或多个宏块的位的选择部分中收集机器字,并且将机器字的数据写入内存。该功能能被并行地执行,以将来自GPU121的内存(例如渲染目标200)的该输出加速写入主内存,以便通过网络传输给客户端130。在其他实施方案中,可直接访问GPU121的内存,以写入用于传输到网口或其他连接抽象的数据。—些种类的应用程序可能需要将它们的输出持续地渲染成代表性图像。例如,如上所述,游戏应用程序经常需要每秒60次渲染。其他类型的应用程序可能仅在响应用程序户输入时需要一个新的渲染。例如,当用户输入时,文字处理应用程序可能仅需要刷新显示于客户端屏幕上的文本文档(即,渲染该文档的图像)。另外,用于在客户端运行的应用程序实例的每个渲染可以基于不同的渲染参数,因为应用程序实例的当前状态可能随时间而改变。在特定的实施例中,每个客户端130可将在客户端130上运行的应用程序131的3D模型或渲染所依据的其他数据以及最新的渲染参数(需要时)传输到服务器120。服务器120可以存储从每个客户端130接收到的信息。在特定的实施例中,服务器120可以基于从每个客户端130接收到的信息确定在需要为特定客户端执行渲染时,哪个3D模型和哪些渲染参数将被用于该渲染,以及其他适合的信息。在特定的实施例中,CPU122可以执行实际的决定。在特定的实施例中,对于每个渲染进程(rendering pass), CPU122可以给GPU121提供在该渲染进程中GPU121同时执行多个渲染时可能需要的所有必要的数据(例如,模型,成组的渲染参数)。图3示出了一种服务器同时为多个客户端执行多个渲染的方法。特定的实施例可以将服务器的GPU中的渲染目标分为多个渲染目标单元(步骤301)。在特定的实施例中,渲染目标可以为帧缓冲器或GPU中可以用于存储渲染图像的其他合适种类的内存或存储器。在特定的实施例中,渲染目标单元可以都具有同样的大小(例如,每个渲染目标单元具有相同数量的像素)。在任意的给定时间,服务器可以与任意数量的客户端相连,而且可以代表并为这些客户端、或者更加具体地说是为在这些客户端上运行的计算机程序的实例执行渲染。特定的实施例可以给当前与服务器相连并由服务器支持的每个客户端分配一个或多个渲染目标单元(步骤302)。给特定客户端实际上分配多少个渲染目标单元以及分配哪些具体的渲染目标单元可以取决于可供选择的具体的渲染目标单元和该客户端的系统架构,诸如,例如但不限于,客户端的视频帧缓冲器或显示器的分辨率、尺寸以及取向。例如,当将客户端新连接到服务器上时,服务器可以给该特定客户端分配一个或多个其当前可用的渲染目标单元(即,该渲染目标单元当前没有分配给任何其他的客户端)。相反,当客户端与服务器断开连接时,服务器可以解除分配(即释放)已分配给该特定客户端的渲染目标单元,使得这些渲染目标单元将来可用于分配给其他客户端。分配给客户端的渲染目标单元的数量可以取决于该特定客户端的视频帧缓冲器或显示器的大小或分辨率(例如,具有高分辨率显示器的客户端与具有低分辨率显示器的客户端相比可以被分配给更多数量的渲染目标单元)。在特定的实施例中,当在与服务器连接的客户端上开始运行计算机程序的实例时,如果服务器要为该程序实例执行渲染,那么客户端会通知程序实例的服务器并且请求服务器为该程序实例执行渲染。客户端可以将程序实例的模型传输给服务器以在渲染中使用。服务器在其为程序实例执行渲染期间可以存储程序实例的模型。在特定的实施例中,因为服务器可以为多个客户端执行渲染,所以每个模型可以用一个唯一的标识符(ID)来识别,该标识符指示模型与哪个客户端相关联。当然,在客户端上可以执行相同或不同计算机程序的多个实例。在特定的实施例中,客户端可以请求服务器为在该客户端上运行的多个程序实例执行渲染。在这种情况下,客户端可以将对应于多个程序实例的多个模型传输到服务器。例如,每当程序实例在客户端上开始运行时,客户端可以将该程序实例的模型传输到服务器。服务器可以存储这些模型,并且可以用唯一的ID识别每个模型,该ID指示模型与哪个客户端和在该客户端上运行的哪个程序实例相关联。特定的实施例可以为当前与服务器连接并由服务器支持的每个客户端保持一组或多组渲染参数(步骤303)。在特定的实施例中,每组渲染参数对应于在特定客户端上运行的计算机程序的一个实例并且指示如何为该特定程序实例执行渲染。因此,由于程序实例的显示可以随时间而变化,渲染参数也可以随时间而改变(例如,从渲染到渲染)。在特定的实施例中,每组渲染参数用唯一的ID进行识别,该ID指示模型与哪个客户端和在该客户端上运行的哪个程序实例相关联。目前存在着大量的渲染技术,而本发明可能适用任何适合的渲染技术。例如,光线跟踪是熟知的且常用的渲染技术,其能够在最终的渲染图像中产生程度非常高的真实感。简而言之,光线跟踪是一种通过跟踪穿过位于图像平面中的像素的光路而由模型生成图像的技术。有多种算法可以用于光线跟踪。虽然光线跟踪逼真地模拟了 3D物体上的照明效果,但其是计算密集性的,因此最好在服务器上实现。特定的实施例可以在服务器上实施光线跟踪算法并利用光线跟踪执行渲染。在计算机绘图领域,着色器是一组主要用于在具有高度灵活性的绘图硬件上计算渲染效果的软件指令。在特定的实施例中,着色器可以用于对服务器的GPU可编程渲染管线编程,其可能已经主要地替代了固定功能管线。有各种类型的着色器,并且本发明可适用任何合适的着色器。例如,顶点着色器可以对给予GPU的每个顶点运行一次,以将虚拟空间中每个顶点的3D位置转换为在显示器屏幕上或在渲染的2D图像中显示的2D坐标和Z缓冲器的深度值。顶点着色器可以操控诸如位置、颜色和纹理坐标等的属性。几何着色器可以是在渲染管线中位于顶点着色器后的下一个阶段,其可以从网格中添加和移除顶点,并且可以用于在流程上生成几何图形或用于给现有的网格添加体积细节。像素着色器,也被称为片段着色器,可计算各像素的颜色并典型地用于场景灯光及相关效果,诸如凹凸贴图(bumpmapping)和调色(color toning)等。在特定的实施例中,每一组渲染参数可以包括对应于GPU的渲染管线中的各种着色器的着色器常数。这些着色器常数给GPU指示出特定的渲染是如何执行的。因此,事实上,着色器常数可以用于控制渲染的结果(即,渲染图像)。如上所述,每组渲染参数(例如,着色器常数)可以在用于对应的程序实例的渲染与渲染之间变化,因为程序实例可以在不同时间显示不同的图像。如果需要的话,特定的实施例可以在渲染进程之前更新由服务器保持的渲染参数组(步骤304)。每个客户端可以将在其上运行的并由服务器支持的程序实例的当前状态传输给服务器。在特定的实施例中,服务器可以基于从客户端接收的信息更新渲染参数组。在特定的实施例中,在单次渲染进程中,服务器可以为当前由其所支持的多个客户端同时渲染多个图像(即,执行多次渲染)(步骤305)。在特定的实施例中,单次渲染进程可以通过GPU渲染管线移动一次。在渲染管线中可以存在多个阶段。例如,首先,服务器的CPU可以将指令和几何图形数据发送给服务器的GPU。这些指令和数据可以基于对应的模型和渲染参数组来确定。其次,在顶点着色器内,可以转换几何图形并且可以进行光照计算。第三,如果使用几何着色器,那么就可以执行场景中的一些几何图形变化。第四,计算出的几何图形可以被三角化。最后,可以将这些三角形转换为像素。为了在单次渲染进程中同时渲染多个图像,GPU可以在多个渲染过程中共享其资源。在特定的实施例中,每个最终的渲染图像以及更具体地说,渲染图像的像素值被存储在特定的渲染目标单元中,该渲染目标单元被分配给对应于该渲染图像的客户端。在特定的实施例中,服务器可以采用视频流将渲染图像传输到其当前所支持的每个客户端,使得每个渲染图像为该视频流的一帧。在特定的实施例中,服务器可以在单步编码中将存储在渲染目标中的多个渲染图像同时编码到对应于多个客户端的多个视频流中(步骤306)。例如,第一渲染图像被编码为针对第一客户端的第一视频流的当前帧;第二渲染图像被编码为针对第二客户端的第二视频流的当前帧;以此类推。在特定的实施例中,服务器可以随后将现已被编码为视频流中的帧的渲染图像传输到客户端(步骤307)。每个视频流被传输给对应的客户端。例如,第一视频流被传输给第一客户端;第二视频流被传输给第二客户端;以此类推。当接收到视频流中的新数据时,每个客户端可以将视频流解码以提取当前帧,该帧实际上就是由服务器渲染的图像。客户端然后可以在其显示器屏幕上显示该当前帧(即,渲染图像)。经常可能需要为在每个客户端上运行的每个程序实例执行多个渲染。因此,步骤304-307可以重复。每次渲染进程可以为当前由服务器支持的客户端最终生成大量的渲染图像,一个特定客户端有一个渲染图像。每个渲染图像可以被编码成对视频流中单独的一帧并被传输到对应的客户端。特定的实施例可在网络环境中实施。图4示出了一个示例性的网络环境400。网络环境400包括将一个或多个服务器420以及一个或多个客户端430彼此连接在一起的网络410。在特定的实施例中,网络410可以为内联网,外联网,虚拟专用网(VPN),局域网(LAN),无线LAN (WLAN),广域网(WAN),城域网(MAN),通信网络,卫星网络,部分因特网,或者另外的网络410,或者两个或两个以上此类网络410的组合。本发明适用任何合适的网络410。一个或多个链路450将服务器420或客户端430连接到网络410中。在特定的实施例中,一个或多个链路450中的每一个包括一个或多个有线的、无线的或光学的链路450。在特定的实施例中,一个或多个链路450中的每个链路包括内联网,外联网,VPN,LAN,WLAN, WAN,MAN,通信网络,卫星网络,部分因特网,或其他链路450,或者两个或两个以上此类链路450的组合。本发明适用任何合适的能将服务器420和客户端430连接到网络中的链路450。在特定的实施例中,每个服务器420可以是单一的服务器,或者可以是跨多个计算机或多个数据中心的分布式服务器。服务器420可以是各种类型的,诸如,例如但不限于,网络服务器,新闻服务器,邮件服务器,消息服务器,广告服务器,文件服务器,应用程序服务器,交换服务器,数据库服务器,或代理服务器。在特定的实施例中,每个服务器420可以包括硬件,软件,或者嵌入式逻辑部件或两个及两个以上的此类部件的组合,以用于执行由服务器420支持或实施的合适的功能。例如,网络服务器一般能够托管包含网页或网页中的特定要素的网站。更具体地说,网络服务器可以托管HTML文件或其他文件类型,或者可以依请求动态地创建或建立文件,并响应于来自客户端430的HTTP或其他请求将文件传递给客户端430。邮件服务器一般能够为各种客户端430提供电子邮件服务。数据库服务器一般能够提供用于管理存储在至少一个数据库中的数据的界面。在特定的实施例中,每个客户端430可以为这样一种电子设备,其包括硬件,软件,或者嵌入式逻辑部件,或者两个或两个以上此类部件的组合,并且能够执行由客户端430支持或实现的合适的功能。例如但不限于,客户端430可以为台式电脑系统,笔记本电脑系统,上网本电脑系统,手持电子设备,或移动电话。客户端430可以使客户端430处的网络用户能够访问网络410。客户端430可以具有网页浏览器,诸如Microsoft InternetExplorer或Mozilla Firefox,并且可以具有一个或多个附件,插件,或其他诸如GoogleToolbar或YahooToolbar之类的扩展。客户端430可以使其用户能够与在其他客户端430上的其他用户通信。本发明适用任何合适的客户端430。在特定的实施例中,一个或多个数据存储器440可以通过一个或多个链路450可通信联络地与一个或多个服务器420相链接。在特定的实施例中,数据存储器440可以被用于存储各种信息。在特定的实施例中,可以根据具体的数据结构组织存储在数据存储器440中的信息。特定的实施例可以提供能够使服务器420或客户端430管理(例如检索,修改,添加,或删除)存储于数据存储器440中的信息的界面。在特定的实施例中,每个服务器420可以同时服务于一个或多个客户端430并且为其所支持的客户端430执行渲染。通过以每一个渲染图像作为特定的一帧的方式编码视频流中的渲染图像,服务器420可以传输为其所支持的特定客户端430渲染的图像,并且将视频流传输给该客户端430。当接收到视频流时,客户端430可以将该视频流解码,以提取图像帧用于显示。申请号为12/579,300和12/709,343的两篇美国申请(这两篇文献都通过引用而结合到本文中)公开了可以用于将被压缩的视频流传送到一个或多个客户端430的视频编解码器。另外,上述申请还公开了每个服务器420是如何利用GPU的并行处理资源来生成视频数据并流式传输给客户端430的。特定的实施例可以通过硬件、软件或硬件和软件的结合来实现。例如但不限于,一个或多个计算机系统可以运行特定的逻辑或软件以实施在此所描述或展示的一个或多个过程的一个或多个步骤。在适当情况下,一个或多个计算机系统可以为单一式或分布式架设的多计算机系统或多数据中心。本发明适用任何合适的计算机系统。在特定的实施例中,完成在此所描述或展示的一个或多个过程的一个或多个步骤不必局限于一个或多个特定的地理位置,并且不需要一定具有时间限制。举例而言但并不仅限于此,一个或多个计算机系统可以以“实时”,“线下”,或“批处理模式”执行它们的功能,另外,在适当情况下,也可以以前述的“实时”、“线下”、“批处理模式”的合适的组合执行。在适当情况下,一个或多个计算机系统可以在不同时间,不同位置,使用不同处理过程来执行它们的一部分或多部分功能。此处,有关的逻辑可以包括软件,并且在适当情况下,反之亦然。有关的软件可以包括一个或多个计算机程序,并且在适当情况下,反之亦然。有关的软件可以包括数据,指令,或两者,并且在适当情况下,反之亦然。类似地,有关的数据可以包括指令,并且在适当情况 下,反之亦然。一个或多个计算机可读存储介质可以存储或在其他情况下包括实现特定实施例的软件。在适当情况下,计算机可读介质可以是任何能够执行、通信、包含、持有、保持、传播、保留、存储、传送、输送,或在其他情况下包括软件的介质。在适当情况下,计算机可读介质可以是生物的、化学的、电子的、电磁的、红外的、磁性的、光学的、量子的或其他合适的介质或者两种或两种以上此类介质的组合。计算机可读介质可以包括一个或多个纳米级部件或在其他情况下包含纳米级的设计或制造。计算机可读存储介质的例子包括但不限于,光盘(CD),现场可编程门阵列(FPGA),软盘,软式光盘,硬盘,全息存储设备,集成电路(IC)(诸如专用集成电路(ASIC)),磁带,高速缓冲存储器,可编程逻辑器件(PLD),随机存储器(RAM)设备,只读存储器(ROM)设备,半导体存储设备,以及其他合适的计算机可读存储介质。在合适的情况下,实施特定实施例的软件可以以任何合适的编程语言(其可以是程序性的或面向对象的)或编程语言的组合来编写。在合适的情况下,任何合适类型的计算机系统(诸如单处理器或多处理器计算机系统)或多个系统都可以运行实施特定实施例的软件。在合适的情况下,通用计算机系统也可以运行实施特定实施例的软件。例如,图5示出了一个示例性的计算机系统500,该系统适用于实现特定实施例的一部分或多部分。尽管本发明描述并展示了特定配置下的具有特定部件的特定计算机系统500,但本发明适用在任何合适配置下具有任何合适部件的任何合适的计算机系统。此外,计算机系统500可以采取任何合适的物理结构,诸如一个或多个集成电路(1C),一个或多个印刷电路板(PCB),一个或多个手持设备或其他设备(诸如移动电话或PDA),一个或多个个人电脑,或者一个或多个超级计算机。系统总线510将计算机系统500的子系统彼此相互连接起来。此处,有关的总线包括一个或多个服务公共功能的数字信号线。本发明适用任何合适的系统总线510,该系统总线510包括具有任何适当的总线架构的任何合适的总线结构(诸如一个或多个内存总线,一个或多个外围总线,一个或多个局部总线,或者上述几种总线的组合)。总线架构的例子包括但不限于,工业标准架构(ISA)总线,增强ISA (EISA)总线,微通道架构(MCA)总线,视频电子标准协会局域(VLB)总线,外围设备互联(PCI)总线,PCI-Express总线(PCI-X),以及加速图形接口(AGP)总线。计算机系统500包括一个或多个处理器520(或中央处理单元(CPU))。处理器520可以包括用于指令、数据或计算机地址的临时本地存储的高速缓冲存储器522。处理器520与一个或多个存储设备连接,其包括内存530。内存530可以包括随机存储器(RAM)532和只读存储器(ROM)534。数据和指令可以在处理器520和RAM532之间双向传送。数据和指令可以单向地从R0M534传送到处理器520。RAM532和R0M534可以包括任何合适的计算机可读存储介质。
计算机系统500包括双向连接到处理器520上的固定存储器540。固定存储器540可以通过存储控制单元552连接到处理器520上。固定存储器540可以提供额外的数据存储容量并且可以包括任何合适的计算机可读存储介质。固定存储器540可存储操作系统(OS) 542,一个或多个可执行文件544,一个或多个应用程序或程序546,数据548,等等。固定存储器540典型地是比主存储器慢的二级存储介质(诸如硬盘)。在合适的情况下,存储在固定存储器540中的信息可以作为虚拟内存结合到内存530中。处理器520可以连接多个界面,诸如,例如图形控制554,视频界面558,输入界面560,输出界面562和存储界面564,这些界面又可以分别连接到合适的设备上。输入或输出设备的例子包括但不限于,视频显示器,轨迹球,鼠标,键盘,麦克风,触敏显示器,读卡器,磁带或纸带读取器,平板电脑,手写笔,声音或手写识别器,生物特征读取器,或计算机系统。网络界面556可以将处理器520连接到另一计算机系统或网络580。借助于网络界面556,处理器520可以在执行特定的实施例的各个步骤的过程中从网络580接收信息或给网络580发送信息。特定的实施例可以在处理器520上单独地实行。特定的实施例可以在处理器520上以及在一起操作的一个或多个远程处理器上实行。在网络环境中,在计算机系统500连接网络580的情况下,计算机系统500可以与连接网络580的其他设备通信。计算机系统500可以通过网络界面556与网络580通信。例如,计算机系统500可以接收来自网络580的在网络界面556呈现为一个或多个输入数据包的形式的信息(诸如来自另一设备的请求或响应),并且内存530可以存储该输入数据包以用于随后的处理。计算机系统500可以以来自网络界面556的呈一个或多个输出数据包形式的信息(诸如给另一设备的请求或响应)发送给网络580,所述信息在发送之前可由内存530存储。根据特定的需要,处理器520可以访问内存530中的输入或输出数据包以对其进行处理。计算机系统500可以具有一个或多个输入设备566 (其可以包括按键,键盘,鼠标,手写笔,等等),一个或多个输出设备568 (其可以包括一个或多个显不器,一个或多个扬声器,一个或多个打印机,等等),一个或多个存储设备570,以及一个或多个存储介质572。输入设备566可以在计算机系统500的内部或外部。输出设备568可以在计算机系统500的内部或外部。存储设备570可以在计算机系统500的内部或外部。存储介质572可以在计算机系统500的内部或外部。特定的实施例包含一个或多个计算机存储产品,该产品包括一个或多个计算机可读存储介质,该介质包含用于实施本文中所述或所展示的一个或多个过程中的一个或多个步骤的软件。在特定的实施例中,介质的一部分或多个部分,软件,或它们两者可以被特别设计并制造,以实施本文中所述或所展示的一个或多个过程中的一个或多个步骤。另外或作为一种选择方案,在特定的实施例中,介质的一部分或多个部分,软件,或它们两者可以是通用的而没有针对本文中所述或所展示的过程进行特别设计和制造。计算机可读存储介质的例子包括但不限于,⑶(诸如⑶-ROM),FPGA,软盘,软式光盘,硬盘,全息存储设备,IC(诸如ASIC),磁带,高速缓冲存储器,PLD, RAM设备,ROM设备,半导体存储设备,以及其他合适的计算机可读存储介质。在特定的实施例中,软件可以为编译器可以生成的机器码,或者一个或多个包含更高级别的编码的文件,所述更高级别的编码可由计算机通过使用解释器来执行。
举例而言但并不局限于此,内存530可以包括一个或多个包含软件的计算机可读存储介质,并且计算机系统500可以提供本文中所述或所展示的特定功能作为处理器520执行该软件的结果。内存530可以存储该软件,而处理器520可以运行该软件。通过网络界面556,内存530可以从在包含软件的大容量存储设备530上的计算机可读存储介质中或者从一个或多个其他源中读取软件。当运行软件时,处理器520可以执行本文中所述或所展示的一个或多个过程中的一个或多个步骤,其可以包括根据特定需求定义内存530中用于存储的一个或多个数据结构,以及按照由软件的一个或多个部分的指引修改一个或多个数据结构。另外或作为一种选择方案,由于硬连线在电路中的或在电路中以其他方式体现的逻辑,计算机系统500可以提供本文中所述或所示的特定功能,其可以代替软件或与软件一起运行,以执行本文中所述或所示的一个或多个过程中的一个或多个步骤。根据特定需求,本发明公开的技术方案包含硬件和软件的任何合适的组合。在特定的实施例中,计算机系统500可以包括一个或多个图形处理单元(GPU)524。在特定的实施例中,GPU524可以包括一个或多个针对常用于图形渲染中的数学运算的集成电路和/或处理核。在一些实施例中,GPU524可以采用专门的图形单元指令组,而在其他实施方案中,GPU可以采用类似CPU的(例如改进的x86)指令组。图形处理单元524可以完成大量图形基元操作,诸如位块图像传送,纹理映射,像素着色,帧缓冲,以及类似操作。在特定的实施例中,GPU524可以是图形加速器,通用GPU (GPGPU),或任何其他合适的处理单元。在特定的实施例中,GPU524可以体现在图形卡或显示卡中,该图形卡或显示卡通过卡槽安装在硬件系统架构上。在其他实施例中,GPU524可以集成在计算机系统架构的主板上。合适的图形处理单兀可以包括基于Advanced Micro Devices (r) AMD R7XX的GPU设备(Radeon (r) HD 4XXX),基于 AMD R8XX 的 GPU 设备(Radeon (r) HD5XXX),基于 Intel (r)Larabee 的 GPU 设备(未发布),nVidia (r) 8 系列 GPU, nVidia (r) 9 系列 GPU, nVidia (r) 100系列 GPU, nVidia (r) 200 系列 GPU,以及任何其他 DXll-capable GPU。尽管本发明的说明书描述或展示了按照特定顺序发生的特定操作,但本发明适用按照任何合适的顺序发生的任何合适的操作。另外,本发明适用按任何合适顺序重复一次或多次的任何合适的操作。尽管本发明的说明书描述或展示了特定操作依次发生,但在合适的情况下,本发明适用基本上同时发生的任何合适操作。在合适的情况下,本文中所述或所示的任何合适的操作或操作顺序可以被中断,暂停,或被另一过程(诸如操作系统或内核)控制。动作能够在操作系统环境中进行或作为占据系统处理过程的全部或主要部分的独立应用程序的流程进行。本发明的公开内容涵盖本领域普通技术人员应当理解的对本文所述具体实施例做出的所有改变,置换,变化,替代和修改。同样,在合适的情况下,所附的权利要求书涵盖本领域普通技术人员可以理解的对本文所述具体实施例做出的所有改变,置换,变化,替代和修改。
权利要求
1.一种方法,包括在计算机系统上托管多个应用程序实例,每个应用程序实例对应一远程客户端应用程序;保持与为其托管应用程序实例的每个所述远程客户端应用程序的网络连接;在至少两个所述远程客户端应用程序之间分配所述计算机系统的图形处理单元的资源;利用所述计算机系统的所述图形处理单元的所述资源,同时渲染相应于所述至少两个远程客户端应用程序的所述应用程序实例的图形输出;通过相应的网络连接,将经渲染的图形输出传输给所述至少两个远程客户端应用程序。
2.根据权利要求I所述的方法,其特征在于,所述图形处理单元的所述资源包括内存,以及在所述至少两个远程客户端应用程序之间分配所述图形处理单元的资源的步骤包括将所述内存的特定部分分配给所述至少两个远程客户端应用程序中的每一个。
3.根据权利要求2所述的方法,其特征在于,每个经渲染的图像输出存储在被分配给对应远程客户端应用程序的所述内存的所述部分中。
4.根据权利要求I所述的方法,还包括如下所述步骤,即,利用所述计算机系统的所述图形处理单元的所述资源,在传输之前对所述经渲染的图像输出同时进行编码。
5.根据权利要求4所述的方法,其特征在于,每个经渲染的图形输出被编码并且在视频流中被传输给所述对应的远程客户端应用程序。
6.根据权利要求4所述的方法,其特征在于,所述应用程序实例的所述图形输出在单次渲染中被渲染;所述应用程序实例的所述经渲染的图形输出在单次编码中被编码。
7.一种方法,包括由第一计算机系统访问多组渲染参数,其中,所述第一计算机系统被连接到多个第二计算机系统;所述多组渲染参数中的每一组对应于所述多个第二计算机系统中特定一个第二计算机系统;所述第一计算机系统包括用于存储图像的渲染目标;并且所述渲染目标在所述多个第二计算机系统之间共享;基于所述多组渲染参数,由所述第一计算机系统为所述多个第二计算机系统同时渲染多个图像,其中,基于对应于所述多个第二计算机系统中的特定一个第二计算机系统的所述多组渲染参数中的特定一组渲染参数,为所述多个第二计算机系统中的特定一个第二计算机系统渲染所述多个图像中的每个图像并将其存储在所述渲染目标中;以及由所述第一计算机系统将所述多个图像中的每个图像传输给所述多个第二计算机系统中的已经为其渲染图像的所述特定一个第二计算机系统。
8.根据权利要求7所述的方法,其特征在于,所述渲染目标被分为多个渲染目标单元;所述多个渲染目标单元中的每一个用于存储至少一个像素;所述多个第二计算机系统中的每一个被分配所述多个渲染目标单元中的至少一个;所述多个图像中的每一个被渲染到所述多个渲染目标单元中的至少一个渲染目标单元中,所述至少一个渲染目标单元被分配给所述多个第二计算机系统中的已经为其渲染图像的所述特定一个第二计算机系统。
9.根据权利要求7所述的方法,还包括如下所述步骤,即,在传输之前由所述第一计算机系统对所述多个图像同时进行编码。
10.根据权利要求9所述的方法,其特征在于,所述多个图像中的每个图像被编码为多个视频流中的特定一个视频流的当前帧;以及所述多个视频流中的每个视频流对应于所述多个第二计算机系统中的特定一个第二计算机系统。
11.根据权利要求10所述的方法,其特征在于,由所述第一计算机系统将所述多个图像中的每个图像传输给所述多个第二计算机系统中的已经为其渲染图像的所述特定一个第二计算机系统的步骤包括,由所述第一计算机系统将所述多个视频流中的每个视频流传输给所述多个第二计算机系统中的所述对应的一个第二计算机系统。
12.根据权利要求7所述的方法,还包括如下所述步骤,即,由所述第一计算机系统更新所述多组渲染参数。
13.根据权利要求12所述的方法,其特征在于,特定的计算机程序的实例在所述多个第二计算机系统的每个第二计算机系统上运行;以及在所述多个第二计算机系统的每个第二计算机系统上运行的所述特定计算机程序的实例的当前状态决定与所述第二计算机系统相对应的所述多组渲染参数中的特定一组渲染参数。
14.根据权利要求7所述的方法,其特征在于,所述多组渲染参数中的每组渲染参数包括至少一个着色器常数。
15.—种系统,包括内存,其包括由一个或多个处理器可执行的指令;图形处理单元;以及一个或多个处理器,其连接所述内存并可操作地执行所述指令,所述一个或多个处理器可在执行所述指令时操作,从而托管多个应用程序实例,每个应用程序实例对应于一远程客户端应用程序;保持与为其托管应用程序实例的每个所述远程客户端应用程序的网络连接;在至少两个所述远程客户端应用程序之间分配所述图形处理单元的资源;利用所述图形处理单元的所述资源同时渲染对应于所述至少两个远程客户端应用程序的所述应用程序实例的图形输出;通过相应的网络连接,将经渲染的图形输出传输给所述至少两个远程客户端应用程序。
16.一种或多种计算机可读的有形存储介质,该介质包括在由一个或多个计算机系统执行时可操作的软件,从而托管多个应用程序实例,每个应用程序实例对应于一个远程客户端应用程序;保持与为其托管应用程序实例的每个所述远程客户端应用程序的网络连接;在至少两个所述远程客户端应用程序之间分配所述图形处理单元的资源;利用所述图形处理单元的所述资源同时渲染对应于所述至少两个远程客户端应用程序的所述应用程序实例的图形输出;以及通过相应的网络连接,将经渲染的图形输出传输给所述至少两个远程客户端应用程序。
全文摘要
本发明公开的方法、设备和系统涉及在计算机系统上托管多个应用程序实例,每个应用程序实例对应于一个远程客户端应用程序;保持与为其托管应用程序实例的每个远程客户端应用程序的网络连接;在至少两个远程客户端应用程序之间分配计算机系统中图形处理单元的资源;利用计算机系统的图形处理单元的资源,同时渲染对应于至少两个远程客户端的应用程序实例的图形输出;以及通过相应的网络连接将经渲染的图像输出传输给至少两个远程客户端应用程序。
文档编号G06F15/16GK102959517SQ201180028557
公开日2013年3月6日 申请日期2011年6月10日 优先权日2010年6月10日
发明者朱利安·M·乌尔巴赫 申请人:Otoy公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1