Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C GPU上的完全通用代码_C_Programming Languages_Opencl_Gpgpu_Computation Theory - Fatal编程技术网

C GPU上的完全通用代码

C GPU上的完全通用代码,c,programming-languages,opencl,gpgpu,computation-theory,C,Programming Languages,Opencl,Gpgpu,Computation Theory,我被一个客户接洽去做一个项目,该项目将涉及使用OpenCL在GPU上运行完整的程序 我对CUDA和低级机器架构有相当的了解。据我所知,GPU代码没有调用堆栈,也没有指针,也没有任何非结构化的控制流机制,如goto、异常或函数指针。 在我看来,它在语义上类似于一种基本的FORTRAN方言。 我知道,从另一个GPU内核调用的GPU内核像宏扩展一样内联,没有调用/RET机制 据我所知,如果没有堆栈,就不可能有词汇范围的语言,OpenCL编译的方言是C语言的一个非常扁平的子集,类似地,CUDA虽然允许模

我被一个客户接洽去做一个项目,该项目将涉及使用OpenCL在GPU上运行完整的程序

我对CUDA和低级机器架构有相当的了解。据我所知,GPU代码没有调用堆栈,也没有指针,也没有任何非结构化的控制流机制,如goto、异常或函数指针。 在我看来,它在语义上类似于一种基本的FORTRAN方言。 我知道,从另一个GPU内核调用的GPU内核像宏扩展一样内联,没有调用/RET机制

据我所知,如果没有堆栈,就不可能有词汇范围的语言,OpenCL编译的方言是C语言的一个非常扁平的子集,类似地,CUDA虽然允许模板和其他东西,但只提供了C语言的一个非常小的子集++

客户机希望将Javascript转换为C、LLVM,然后转换为OpenCL字节码,或者以某种方式在GPU上运行完整的程序,即使这些程序运行缓慢,没有并行性


我是否正确地说服客户,他希望实现的目标在技术上是不可能的,并且不是真正有用的?

第一部分“技术上不可能”似乎有点强,我认为如果一个人真的想在这方面花费/浪费时间,可以使用(很多)聪明的技巧。第二部分“并非真正有用”可能是正确的,使用通用CPU执行JavaScript或C等通用语言似乎更明智。。。但这些只是我的想法,没有什么明确的!你能在没有调用堆栈、指针和goto的架构上实现像C这样的完整语言吗?一个人能不打电话/不打电话吗?无论代码大小和效率如何,每个函数调用都可以完全内联吗?有没有什么递归算法不能通过迭代来实现?我们不能直接实现,但是经过一些思考,使用“聪明的技巧”是可能的。我见过许多创造性的想法/代码完全排除了这种可能性。但正如我提到的:这可能是浪费时间(因此对你的客户来说肯定不有趣)!我相当确信OpenCL是图灵等价物;因此,是的,任何可以在CPU上用C执行的程序(逻辑)都可以在GPU上用OpenCL模拟(或者,用一个较弱的版本:在CPU上用C可以解决的所有问题都可以在GPU上用OpenCL解决)——忽略I/O等问题。然而,将整个程序放在GPU上是毫无意义的。使用GPU的全部目的是加速某些类型的计算;大多数计算的性能都会受到影响。烤鸡更适合吃;烘焙果冻不会有同样的效果。已经有几个类似的项目来生产跨CPU和GPU代码运行的集成编程模型。例如,NumbaPro和Copperhead都允许Python代码向下编译到GPU。所以这是可能的,但无论如何都不是微不足道的。C++ AMP还允许开发人员编写编译到GPU的内嵌C++代码。您将只能实现该语言的一个子集。正如rep_movsd所指出的,GPU不支持全套功能。