为什么GPU代码中不允许执行系统命令?

时间:2015-08-12 12:58:22

标签: c++ opencl

我尝试在GPU代码(OpenCL / C ++内核)中执行系统命令,就像这样

system("ngspice");

但是我收到了这条ERROR消息:CL_INVALID_BINARY。

我发现一些问题,说不允许在内核中调用外部函数!

OPENCL: OpenCL - is it possible to invoke another function from within a kernel?

CUDA: CUDA External calls not supported

如果我没错,那是OPENCL / CUDA限制之一:

OpenCL:https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/restrictions.html

CUDA:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#functions

我是对的吗?这种限制背后的原因是什么?

3 个答案:

答案 0 :(得分:5)

因为它完全没有意义。您尝试调用的系统在GPU上不存在。您无法在GPU上调用外部程序。尝试通过system调用程序或shell是完全没有意义的。

答案 1 :(得分:2)

CPU和GPU是完全不同的计算机体系结构,具有完全不同的指令集。为一个编写的程序不能在另一个上运行。

当您使用CUDA或OpenCL在GPU上运行程序时,您基本上是在另一台计算机上运行它。它无法访问主机所执行的所有资源:它无法访问硬盘驱动器,也无法在网络上进行通信,也无法使用主机操作系统提供的任何其他服务。所有GPU代码都可以修改内存中的数据。

system("ngspice")不起作用,因为:

  • "ngspice"是硬盘驱动器上程序的名称,但GPU无法与硬盘驱动器进行交互,
  • 即使可以,程序也是为CPU编译的,无法在GPU上运行。

答案 2 :(得分:1)

GPU环境中没有system(就像Puppy所说)。如果要根据内核的计算结果执行system函数,可以从内核中写入输出变量,并在主机代码中使用它来确定它是否应该运行{{1}是否打电话。