OpenCL与CUDA的不同

AMD异构开发 2013-10-16 02:32:13
这样说,CUDA(用runtime api做说明),它的编译过程需要单独安装的一套编译工具,以及,一定的(例如VC)host c compiler,进行host/device混合编译,并将编译得到的host code .obj / device的.cubin/.ptx文件,通过连接器连接成一个exe文件。所以这个过程需要人手工进行。

等你发布的时候,只要目标机器有显卡驱动,(显卡驱动提供driver api支持),同时你的exe附带上runtime的dll(或者从5.5开始可以不附带,直接连接到exe里),这样,只需要有一个exe和一个显卡驱动就能运行,而显卡驱动里无需集成编译器那一堆。

反过来,opencl不同,编译器集成在opencl runtime里面,在用户单独安装后,程序附带上kernel的源代码,现场就地调用runtime中的特性函数进行编译,然后再执行。

正式因为cuda的编译步骤不在运行时刻进行,是单独的分离编译的,而opencl的编译和运行都是直接调用api即可,所以后者更容易在C#之类的使用,(因为只需要简单的调用几个函数即可),而前者却需要有单独的分布的人工的编译的过程,所以后者更容易和C#之类的接口。

但是大部分人都是用C的,而CUDA runtime api提供的直接混合编译,直接得到exe文件,将kernel的编译隐含在了常规的编译过程中,在运行时刻无需单独调用api编译,对C用户来说,cuda更方便。(当然,对C#来说是opencl更方便)
...全文
5130 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
张佩 2013-10-31
  • 打赏
  • 举报
回复
OpenCL的runtime compile便于发布。

608

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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