【问题标题】:Why is execute system command not allowed in GPU code?为什么 GPU 代码中不允许执行系统命令?
【发布时间】:2015-11-05 02:33:44
【问题描述】:

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

system("ngspice");

但我收到此错误消息:CL_INVALID_BINARY。

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

打开: 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

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

【问题讨论】:

    标签: c++ opencl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      • "ngspice"是硬盘上的程序名,但是GPU不能和硬盘交互,
      • 即使可以,程序也是为 CPU 编译的,无法在 GPU 上运行。

      【讨论】:

        【解决方案3】:

        GPU 环境中没有system(就像 Puppy 说的那样)。如果您想根据内核的计算结果执行system 函数,您可以从内核内部写入输出变量并在主机代码中使用它来确定它是否应该运行system 调用.

        【讨论】:

        • 我需要执行这个函数 3000 次,我认为我可以在 GPU 上执行此操作。
        猜你喜欢
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多