1.GPU并行光线跟踪集群的绘制任务动态均衡分配方法,其特征在于:要使用的GPU并行光线跟踪集群由1个控制结点计算机和n个绘制结点计算机通过网络交换机相互连接在一起构成,其中n是大于1的整数,各个绘制结点计算机具有相同的软硬件配置,都配置有GPU并行计算单元;本方法首先在控制结点计算机上对三维场景画面像素矩阵进行分块并对每个分块进行编号;本方法根据上一帧画面绘制时间开销来对绘制下一帧画面时各个绘制结点计算机的任务进行动态的近似均衡分配,即为各个绘制结点计算机分配若干像素分块,使各个绘制结点计算机分得的像素分块的总绘制时间开销近似相等;本方法所需的数据结构和具体实现步骤如下:提供一种数据结构PIXBLOCK,用于存储像素分块信息,数据结构PIXBLOCK包含像素分块的编号NO、像素分块的起始行号RowS、像素分块的结束行号RowE、像素分块的起始列号ColS、像素分块的结束列号ColE、像素分块的绘制时间开销COST共六个成员变量;
1)本方法的第一部分实现三维场景画面像素矩阵的分块,并把划分参数保存在GPU并行光线跟踪集群的控制结点计算机上,具体实现步骤如下:
Step101:在控制结点计算机上运行集群绘制控制程序,通过集群绘制控制程序输入要绘制的三维场景画面的像素行数M和像素列数N;通过集群绘制控制程序输入像素分块的像素行数Bs;
Step102:在集群绘制控制程序中执行以下操作:
Step102‑1:计算 M>Bs,N>Bs, 表示对x向下取整,这意味
着把三维场景画面的像素矩阵分成M′×N′个像素分块,即第1个像素分块、第2个像素分块、以此类推一直到第M′×N′个像素分块;从整个三维场景画面的像素矩阵来看,第m个像素分块实际上对应三维场景画面的像素矩阵的第ib行到第ie行、第jb列到第je列的像素,其中Step102‑2:在内存中创建一个包含M′×N′个元素的一维数组A001,数组A001的每个元素存储一个数据结构PIXBLOCK类型的变量;按像素分块编号递增的顺序,即从第1个开始一直到第M′×N′个,逐个针对每个像素分块A002做如下操作:在内存中创建一个数据结构PIXBLOCK类型的变量A003;根据像素分块A002的编号m,计算ib、ie、jb、je的值;把变量A003的像素分块的编号NO成员变量赋值为m,把变量A003的像素分块的绘制时间开销COST成员变量赋值为1,把变量A003的像素分块的起始行号RowS成员变量赋值为ib,把变量A003的像素分块的结束行号RowE成员变量赋值为ie,把变量A003的像素分块的起始列号ColS成员变量赋值为jb,把变量A003的像素分块的结束列号ColE成员变量赋值为je,把数组A001的第m个元素赋值为变量A003的值;数组A001的第m个元素对应第m个像素分块;
2)本方法的第二部分实现GPU并行光线跟踪集群的均衡化任务分配,具体步骤如下:
Step201:在所有绘制结点计算机上启动像素分块绘制程序;控制结点计算机上的集群绘制控制程序通过网络把三维场景模型发送给在各个绘制结点计算机上运行的像素分块绘制程序,在各个绘制结点计算机上运行的像素分块绘制程序把接收到的三维场景模型保存在各自的内存中;集群绘制控制程序在控制结点计算机的内存中创建一个列表B001,用于存储数据结构PIXBLOCK类型的变量,令列表B001为空;通过集群绘制控制程序,在控制结点计算机的内存中创建n个队列QBlock,队列QBlock的元素存储数据结构PIXBLOCK类型的变量,第iq个队列QBlock用于存储分配给第iq个绘制结点计算机的像素分块信息,iq=1,
2,…,n;令每个队列QBlock为空;
Step202:集群绘制控制程序根据用户的当前人机交互输入来设置虚拟相机参数CamParam,集群绘制控制程序通过网络向在各个绘制结点计算机上运行的像素分块绘制程序发送虚拟相机参数CamParam;在各个绘制结点计算机上运行的像素分块绘制程序根据接收到的虚拟相机参数CamParam设置绘制三维场景画面所用的虚拟相机;
Step203:通过集群绘制控制程序把数组A001的所有元素存储的数据结构PIXBLOCK类型的变量添加到列表B001中;把列表B001的元素存储的数据结构PIXBLOCK类型的变量的像素分块的绘制时间开销COST成员变量的值作为关键字,按从大到小的顺序对列表B001的元素进行排序;
Step204:把列表B001的第1个元素存储的数据结构PIXBLOCK类型的变量加入到第1个队列QBlock中,把列表B001的第2个元素存储的数据结构PIXBLOCK类型的变量加入到第2个队列QBlock中,以此类推,把列表B001的第n个元素存储的数据结构PIXBLOCK类型的变量加入到第n个队列QBlock中;令计数器Counter等于n+1;通过集群绘制控制程序在控制结点计算机的内存中创建一个包含n个元素的一维数组ARRCOST;
Step205:令数组ARRCOST的所有元素的值都为0;分别针对iq=1,2,…,n,计算第iq个队列QBlock中的所有元素存储的数据结构PIXBLOCK类型的变量的像素分块的绘制时间开销COST成员变量的累加和SUMC,把数组ARRCOST的第iq个元素赋值为累加和SUMC;计算数组ARRCOST的值最小的元素在数组ARRCOST中的编号IDA,把列表B001的第Counter个元素存储的数据结构PIXBLOCK类型的变量加入到第IDA个队列QBlock中;令Counter=Counter+1;
Step206:如果Counter>M′×N′,则转步骤Step207,否则转步骤Step205;
Step207:分别针对iq=1,2,…,n,集群绘制控制程序通过网络把第iq个队列QBlock发送给第iq个绘制结点计算机上的像素分块绘制程序;
Step208:对于iq=1,2,…,n,第iq个绘制结点计算机上的像素分块绘制程序执行以下操作:
①计算接收到的第iq个队列QBlock包含的元素个数Num,在内存中创建一个包含Num个元素的一维数组C002,把数组C002的每个元素都赋值为0,数组C002的元素与第iq个队列QBlock的元素一一对应,即数组C002的第1个元素对应第iq个队列QBlock的第1个元素,数组C002的第2个元素对应第iq个队列QBlock的第2个元素,以此类推;
②针对接收到的第iq个队列QBlock的各个元素存储的数据结构PIXBLOCK类型的变量C001,分别做如下操作:用光线跟踪技术绘制出由变量C001的像素分块的起始行号RowS成员变量、像素分块的结束行号RowE成员变量、像素分块的起始列号ColS成员变量、像素分块的结束列号ColE成员变量的值确定的像素分块C004的所有像素颜色值并记录相应的像素分块绘制时间开销C003,把绘制时间开销C003赋值给变量C001对应的第iq个队列QBlock的元素对应的数组C002的元素;
③当对接收到的第iq个队列QBlock包含的所有元素存储的数据结构PIXBLOCK类型的变量C001执行完第②步的相应操作后,像素分块绘制程序把绘制出的所有像素分块C004的像素颜色值以及数组C002发送给控制结点计算机上的集群绘制控制程序;
Step209:分别针对iq=1,2,…,n,控制结点计算机上的集群绘制控制程序接收第iq个绘制结点计算机上的像素分块绘制程序发来的所有像素分块C004的像素颜色值以及数组C002;
Step210:控制结点计算机上的集群绘制控制程序根据n个队列QBlock中的元素存储的数据结构PIXBLOCK类型的变量的值以及各个队列QBlock与绘制结点计算机的对应关系,把接收到的所有绘制结点计算机上的像素分块绘制程序发来的所有像素分块C004的像素颜色值拼接成一幅完整的三维场景画面,并显示到显示器上;
Step211:分别针对iq=1,2,…,n,在控制结点计算机上执行如下操作:
对集群绘制控制程序接收到的从第iq个绘制结点计算机发来的数组C002的每个元素D001,做如下操作:
从第iq个绘制结点计算机发来的数组C002的元素与第iq个队列QBlock的元素一一对应,即第iq个绘制结点计算机发来的数组C002的第1个元素对应第iq个队列QBlock的第1个元素,第iq个绘制结点计算机发来的数组C002的第2个元素对应第iq个队列QBlock的第2个元素,以此类推;令BNo表示元素D001对应的第iq个队列QBlock的元素存储的数据结构PIXBLOCK类型的变量的像素分块的编号NO成员变量的值;把数组A001的第BNo个元素存储的数据结构PIXBLOCK类型的变量的像素分块的绘制时间开销COST成员变量赋值为元素D001的值;
Step212:令控制结点计算机的内存中的列表B001为空;令控制结点计算机的内存中的每个队列QBlock为空;如果接收到停止绘制命令,则转步骤Step213,否则转步骤Step202;
Step213:停止绘制。