微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > CUDA和OpenGL互操作的实现及分析

CUDA和OpenGL互操作的实现及分析

时间:04-16 来源:3721RD 点击:

3 CUDA和OpenGL互操作性能实例分析

3.1 测试实例

 这是一个相对简单的实例,其主要功能是不断地动态改变一个纹理图案中每个像素的颜色并显示。该实例使用了OpenGL的PBO并利用了OpenGL与CUDA互操作方式,纹理图案数据的生成主要由CUDA的kernel函数完成,完整程序及CUDA的kernel函数请参看参考文献[5]。

如果不使用CUDA,整个程序结构变化不大,主要差别是生成该纹理图案的函数在CPU上运行,因而该函数及其调用方式要重写,具体函数如下:
void kernel(uchar4*pos,unsigned int width,unsigned int height,float time)
{ unsigned int index,x,y;
for(x=0;x<width;x++)
for(y=0;y<height;y++)
{ unsigned char r=(x+(int)time)&0xff;
unsigned char g=(y+(int)time)&0xff;
unsigned char b=((x+y)+(int)time)&0xff;
index=x*width+y;
pos[index].w=0;
pos[index].x=r;
pos[index].y=g;
pos[index].z=b;
}
}

其中,参数pos表示像素数组,width为图像宽度,height为图像高度,time是每次调用该函数时固定递增的一个值。

3.2 测试结果

上述实例在两种环境中做了实验,CUDA版本都是3.2。测试环境1的主要配置如下:CPU为Intel Core i3-M380,主频为2.53 GHz,GPU为 NVIDIA NVS 3100M,内存为2 GB。测试环境2的主要配置如下:CPU是Intel Core2 duo E7400,主频为2.8 GHz,GPU使用GeForce 9800 GTX+,内存为2 GB。测试时,显示设置的垂直同步要关闭。

测试时设置纹理图像的长和宽都是512,CUDA的线程块为1 024,每个线程块内的线程数为256,在OpenGL的显示回调函数里统计f/s(刷新率),结果如表1所示。

 从实验结果可以看出,CUDA与OpenGL结合的方式效果显著,显示速度比不使用CUDA提高了7~8倍。
CUDA是一种较新的方便使用GPU进行通用计算的架构,OpenGL是图形处理的工业标准。两者的互操作充分利用了GPU的特点,因而显得非常自然和合理,实验验证了两者配合使用的效果。该方式为高性能图形图像显示及科学计算可视化提供了良好的模式架构。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top