用cuda和opengl做个小例子

simonjay2007 2010-03-18 09:29:40
今天老师要我用cuda和opengl画图,先做个小例子试一下,然后再慢慢的提高。有没有哪位前辈给个可以运行的例子啊?(用opengl画图,但要用到cuda)thank you!!
...全文
1228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sambest 2012-03-02
  • 打赏
  • 举报
回复
2楼的例子非常好!

但是最后应该释放一下存储器
cudaFree(d_a);
taker1986 2010-04-18
  • 打赏
  • 举报
回复
這個代碼是可以使用的,

想請問一下, 我想用OpenGL讀圖,

讀圖後使用CUDA來做影像處理,

最後再由OpenGL來顯示,

我應該要怎麼做呢?

謝謝
Awrmb 2010-03-23
  • 打赏
  • 举报
回复
那段代码可以用的啊,我模拟环境都可以编译通过的哦,5楼可能环境的设置有点小问题把
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hnuzhoulin 的回复:]
不好意思啊,图片没有看到
就是提示没有任何错误,但是直接运行之后却出现一个对话框,说出现错误,然后我调试了一下,

在自动窗口看到了里面列出的几个变量,我打开一看,全部是CXX0030: 错误: 无法计算表达式的值 之类的啊?????????

为什么啊??
[/Quote]

1)对话框中错误的message是什么?
2)这时程序已经执行完毕(错误终止)了吧?如是这样的话,变量当然无确定值了.
hnuzhoulin 2010-03-21
  • 打赏
  • 举报
回复
不好意思啊,图片没有看到
就是提示没有任何错误,但是直接运行之后却出现一个对话框,说出现错误,然后我调试了一下,

在自动窗口看到了里面列出的几个变量,我打开一看,全部是CXX0030: 错误: 无法计算表达式的值 之类的啊?????????

为什么啊??
hnuzhoulin 2010-03-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cuda2010 的回复:]
simpleGL的例子不错, 不过对初学者来说还稍有些复杂.
我这里有一个CUDA+OpenGL的最简化的例子, 只有30行左右, 非常适合初学者, 稍做修改就可以完成一些实际的工作.(为简单起见没使用VBO, 效率会有些影响)

这个例子使用CUDA计算出一条sin曲线各点的函数值, 存入数组, 然后用OpenGL显示.


C/C++ code

#include "GL/gl……
[/Quote]
我得有点问题,还望帮忙

我选择运行时,看到的一些情况,希望有用啊




simonjay2007 2010-03-21
  • 打赏
  • 举报
回复
我觉得是你的环境没配好吧?我运行过那段代码,可以画出正弦波。你要把那段代码写在cuda工程里面。[Quote=引用 5 楼 hnuzhoulin 的回复:]
不好意思啊,图片没有看到
就是提示没有任何错误,但是直接运行之后却出现一个对话框,说出现错误,然后我调试了一下,

在自动窗口看到了里面列出的几个变量,我打开一看,全部是CXX0030: 错误: 无法计算表达式的值 之类的啊?????????

为什么啊??
[/Quote]
simonjay2007 2010-03-20
  • 打赏
  • 举报
回复
太感谢了!!!非常感谢你!!![Quote=引用 2 楼 cuda2010 的回复:]
simpleGL的例子不错, 不过对初学者来说还稍有些复杂.
我这里有一个CUDA+OpenGL的最简化的例子, 只有30行左右, 非常适合初学者, 稍做修改就可以完成一些实际的工作.(为简单起见没使用VBO, 效率会有些影响)

这个例子使用CUDA计算出一条sin曲线各点的函数值, 存入数组, 然后用OpenGL显示.


C/C++ code

#include "GL/gl……
[/Quote]
cuda2010 2010-03-20
  • 打赏
  • 举报
回复
simpleGL的例子不错, 不过对初学者来说还稍有些复杂.
我这里有一个CUDA+OpenGL的最简化的例子, 只有30行左右, 非常适合初学者, 稍做修改就可以完成一些实际的工作.(为简单起见没使用VBO, 效率会有些影响)

这个例子使用CUDA计算出一条sin曲线各点的函数值, 存入数组, 然后用OpenGL显示.


#include "GL/glut.h"
#include "cutil.h"

#define W 640
#define H 400
float h_a[W], *d_a;

__global__ void do_cuda(float *a) {
int inx=blockIdx.x*blockDim.x+threadIdx.x;
a[inx]=sinf(inx*0.1);
}

void display() {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_POINTS);
glColor3f(1.0f, 1.0f, 1.0f);
for(int i=0; i<W; i++) glVertex2f((float)(i*2.0/W-1), 0.2f*h_a[i]);
glEnd();
glFinish();
}

int main(int argc, char **argv) {
cudaMalloc((void**)&d_a, sizeof(h_a));
do_cuda<<<20,32>>>(d_a);
cudaMemcpy(h_a, d_a, sizeof(h_a), cudaMemcpyDeviceToHost);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(W, H);
glutCreateWindow("f=sin(x)");
glutDisplayFunc(display);
glutMainLoop();
}
  • 打赏
  • 举报
回复
SDK中有sample的:simpleGL.
第一章导论 1 1.1 从图形处理到通用并行计算 1 1.2 CUDATM:一种通用并行计算架构 3 1.3 一种可扩展的编程模型 3 1.4 文档结构 4 第二章编程模型 7 2.1 内核 7 2.2 线程层次 8 2.3 存储器层次 11 2.4 异构编程 11 2.5 计算能力 11 第三章编程接口 15 3.1 用nvcc编译 15 3.1.1 编译流程 16 3.1.1.1 离线编译 16 3.1.1.2 即时编译 16 3.1.2 二进制兼容性 17 3.1.3 PTX兼容性 17 3.1.4 应用兼容性 18 3.1.5 C/C++兼容性 19 3.1.6 64位兼容性 19 3.2 CUDA C运行时 3.2.1 初始化 20 3.2.2 设备存储器 20 3.2.3 共享存储器 24 3.2.4 分页锁定主机存储器 32 3.2.4.1 可分享存储器(portable memory) 34 3.2.4.2 写结合存储器 34 3.2.4.3 被映射存储器 34 3.2.5 异步并发执行 35 3.2.5.1 主机和设备间异步执行 35 3.2.5.2 数据传输和内核执行重叠 36 3.2.5.3 并发内核执行 36 3.2.5.4 并发数据传输 36 3.2.5.5 流 37 3.2.5.6 事件 41 3.2.5.7 同步调用 42 3.2.6 多设备系统 42 3.2.6.1 枚举设备 42 3.2.6.2 设备指定 42 3.2.6.3 流和事件行为 43 3.2.6.4 p2p存储器访问 44 3.2.6.5 p2p存储器复制 45 3.2.6.6 统一虚拟地址空间 45 3.2.6.7 错误检查 46 3.2.7 调用栈 47 3.2.8 纹理和表面存储器 47 3.2.8.1 纹理存储器 47 3.2.8.2 表面存储器(surface) 60 3.2.8.3 CUDA 数组 65 目录iii 3.2.8.4 读写一致性 66 3.2.9 图形学互操作性 66 3.2.9.1 OpenGL互操作性 67 3.2.9.2 Direct3D互操作性 70 3.2.9.3 SLI(速力)互操作性 82 3.3 版本和兼容性 82 3.4 计算模式 83 3.5 模式切换 84 3.6 Windows上的Tesla计算集群模式 85 第四章硬件实现 87 4.1 SIMT 架构 87 4.2 硬件多线程 88 第五章性能指南 91 5.1 总体性能优化策略 91 5.2 最大化利用率 91 5.2.1 应用层次 91 5.2.2 设备层次 92 5.2.3 多处理器层次 92 5.3 最大化存储器吞吐量 94 5.3.1 主机和设备的数据传输 95 5.3.2 设备存储器访问 96 5.3.2.1 全局存储器 96 5.3.2.2 本地存储器 98 5.3.2.3 共享存储器 99 5.3.2.4 常量存储器 100 5.3.2.5 纹理和表面存储器 100 5.4 最大化指令吞吐量 100 iv CUDA编程指南5.0中文版 5.4.1 算术指令 101 5.4.2 控制流指令 104 5.4.3 同步指令 105 附录A 支持CUDA的GPU 107 附录B C语言扩展 109 B.1 函数类型限定符 109 B.1.1 device 109 B.1.2 global 109 B.1.3 host 109 B.1.4 noinline 和forceinline 110 B.2 变量类型限定符 110 B.2.1 device 111 B.2.2 constant 111 B.2.3 shared 112 B.2.4 restrict 113 B.3 内置变量类型 115 B.3.1 char1、uchar1、char2、uchar2、char3、uchar3、char4、 uchar4、short1、ushort1、short2、ushort2、short3、ushort3、 short4、ushort4、int1、uint1、int2、uint2、int3、uint3、 int4、uint4、long1、ulong1、long2、ulong2、long3、ulong3、 long4、ulong4、float1、float2、float3、float4、double2 115 B.3.2 dim3类型 115 B.4 内置变量 115 B.4.1 gridDim 115 B.4.2 blockIdx 115 B.4.3 blockDim 117 B.4.4 threadIdx 117 B.4.5 warpSize 117 目录v B.5 存储器栅栏函数 117 B.6 同步函数 119 B.7 数学函数 120 B.8 纹理函数 120 B.8.1 纹理对象函数 120 B.8.1.1 tex1Dfetch() 120 B.8.1.2 tex1D() 121 B.8.1.3 tex2D() 121 B.8.1.4 tex3D() 121 B.8.1.5 tex1DLayered() 121 B.8.1.6 tex2DLayered() 122 B.8.1.7 texCubemap() 122 B.8.1.8 texCubemapLayered() 122 B.8.1.9 tex2Dgather() 123 B.8.2 纹理参考函数 123 B.8.2.1 tex1Dfetch() 123 B.8.2.2 tex1D() 124 B.8.2.3 tex2D() 124 B.8.2.4 tex3D() 125 B.8.2.5 tex1DLayered() 125 B.8.2.6 tex2DLayered() 125 B.8.2.7 texCubemap() 125 B.8.2.8 texCubemapLayered() 126 B.8.2.9 tex2Dgather() 126 B.9 表面函数(surface) 126 B.9.1 表面对象函数 127 B.9.1.1 surf1Dread() 127 B.9.1.2 surf1Dwrite() 127 vi CUDA编程指南5.0中文版 B.9.1.3 surf2Dread() 127 B.9.1.4 surf2Dwrite() 128 B.9.1.5 surf3Dread() 128 B.9.1.6 surf3Dwrite() 128 B.9.1.7 surf1DLayeredread() 129 B.9.1.8 surf1DLayeredwrite() 129 B.9.1.9 surf2DLayeredread() 129 B.9.1.10 surf2DLayeredwrite() 130 B.9.1.11 surfCubemapread() 130 B.9.1.12 surfCubemapwrite() 131 B.9.1.13 surfCubemapLayeredread() 131 B.9.1.14 surfCubemapLayeredwrite() 131 B.9.2 表面引用API 132 B.9.2.1 surf1Dread() 132 B.9.2.2 surf1Dwrite() 132 B.9.2.3 surf2Dread() 132 B.9.2.4 surf2Dwrite() 133 B.9.2.5 surf3Dread() 133 B.9.2.6 surf3Dwrite() 133 B.9.2.7 surf1DLayeredread() 134 B.9.2.8 surf1DLayeredwrite() 134 B.9.2.9 surf2DLayeredread() 135 B.9.2.10 surf2DLayeredwrite() 135 B.9.2.11 surfCubemapread() 135 B.9.2.12 surfCubemapwrite() 136 B.9.2.13 surfCubemapLayeredread() 136 B.9.2.14 surfCubemapLayeredwrite() 137 B.10 时间函数 137 目录vii B.11 原子函数 137 B.11.1 数学函数 138 B.11.1.1 atomicAdd() 138 B.11.1.2 atomicSub() 139 B.11.1.3 atomicExch() 139 B.11.1.4 atomicMin() 140 B.11.1.5 atomicMax() 140 B.11.1.6 atomicInc() 140 B.11.1.7 atomicDec() 141 B.11.1.8 atomicCAS() 141 B.11.2 位逻辑函数 141 B.11.2.1 atomicAnd() 141 B.11.2.2 atomicOr() 142 B.11.2.3 atomicXor() 142 B.12 束表决(warp vote)函数 142 B.13 束洗牌函数 143 B.13.1 概览 143 B.13.2 在束内广播一个值 144 B.13.3 计算8个线程的前缀和 145 B.13.4 束内求和 146 B.14 取样计数器函数 146 B.15 断言 147 B.16 格式化输出 148 B.16.1 格式化符号 149 B.16.2 限制 149 B.16.3 相关的主机端API 150 B.16.4 例程 151 B.17 动态全局存储器分配 152 viii CUDA编程指南5.0中文版 B.17.1 堆存储器分配 153 B.17.2 与设备存储器API的互操作 154 B.17.3 例程 154 B.17.3.1 每个线程的分配 154 B.17.3.2 每个线程块的分配 155 B.17.3.3 在内核启动之间持久的分配 156 B.18 执行配置 159 B.19 启动绑定 160 B.20 #pragma unroll 162 B.21 SIMD 视频指令 163 附录C 数学函数 165 C.1 标准函数 165 C.1.1 单精度浮点函数 165 C.1.2 双精度浮点函数 168 C.2 内置函数 171 C.2.1 单精度浮点函数 172 C.2.2 双精度浮点函数 172 附录D C++语言支持 175 D.1 代码例子 175 D.1.1 数据类 175 D.1.2 派生类 176 D.1.3 类模板 177 D.1.4 函数模板 178 D.1.5 函子类 178 D.2 限制 180 D.2.1 预处理符号 180 D.2.2 限定符 180 目录ix D.2.2.1 设备存储器限定符 180 D.2.2.2 Volatile限定符 182 D.2.3 指针 182 D.2.4 运算符 183 D.2.4.1 赋值运算符 183 D.2.4.2 地址运算符 183 D.2.5 函数 183 D.2.5.1 编译器生成的函数 183 D.2.5.2 函数参数 184 D.2.5.3 函数内静态变量 184 D.2.5.4 函数指针 184 D.2.5.5 函数递归 185 D.2.6 类 185 D.2.6.1 数据成员 185 D.2.6.2 函数成员 185 D.2.6.3 虚函数 185 D.2.6.4 虚基类 185 D.2.6.5 Windows相关 185 D.2.7 模板 186 附录E 纹理获取 187 E.1 最近点取样 187 E.2 线性滤波 187 E.3 查找表 189 附录F 计算能力 191 F.1 特性和技术规范 191 F.2 浮点标准 195 F.3 计算能力1.x 198 x CUDA编程指南5.0中文版 F.3.1 架构 198 F.3.2 全局存储器 199 F.3.2.1 计算能力1.0和1.1的设备 199 F.3.2.2 计算能力1.2和1.3的设备 199 F.3.3 共享存储器 201 F.3.3.1 32位步长访问 201 F.3.3.2 32位广播访问 202 F.3.3.3 8位和16位访问 205 F.3.3.4 大于32位访问 205 F.4 计算能力2.x 206 F.4.1 架构 206 F.4.2 全局存储器 208 F.4.3 共享存储器 209 F.4.3.1 32位步长访问 209 F.4.3.2 大于32位访问 210 F.4.4 常量存储器 211 F.5 计算能力3.x 211 F.5.1 架构 211 F.5.2 全局存储器访问 212 F.5.3 共享存储器 213 F.5.3.1 64位模式 213 F.5.3.2 32位模式 213 附录G 驱动API 215 G.1 上下文 218 G.2 模块 219 G.3 内核执行 220 G.4 运行时API和驱动API的互操作性 222 G.5 注意 223

231

社区成员

发帖
与我相关
我的任务
社区描述
CUDA on Windows XP
社区管理员
  • CUDA on Windows XP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧