【问题标题】:programming a gpu without using any library like cuda or opencl?在不使用任何库(如 cuda 或 opencl)的情况下编程 gpu?
【发布时间】:2016-02-25 06:49:52
【问题描述】:

我想知道有没有一种方法可以在不使用任何库或 API 的情况下使用 GPU 进行计算(例如两个矩阵的乘法)。我只想用 C 编写一个程序,我不想使用 CUDA 或 OpenCL 或类似的东西。

【问题讨论】:

  • 您是否想开发通过 PCI 或其他方式与您的 GPU 通信的硬件,以避开 PC BIOS 的帮助?
  • 或者让 BIOS 或 UEFI 只加载和启动您的代码,然后直接访问 I/O 端口或其他东西?
  • @MikeCAT OpenCL 和/或 CUDA 不是硬件 - 它只是一个简单、全面和标准化的 GPGPU 接口。很抱歉代替TS说话,但似乎他只是想问如何直接与GPGPU互连,而顶部没有任何现有接口。

标签: c cuda opencl gpu gpgpu


【解决方案1】:

真正简短的回答是,不,你不能那样做。我熟悉的所有标准“类似 C 或 C++”的 GPU 编程模型都要求您使用 API(OpenCL 或 OpenCL 等计算 API,或 OpenGL 和 Direct3D 等图形 API)来管理设备并加载和执行着色器或在目标 GPU 上并行计算内核。

关于消除使用底层硬件 API 的需要的最接近(可能仅)的事情是 GPU 的编译辅助并行性,例如 OpenACC。在那里,您可以使用预处理器指令来修饰 C、C++ 或 Fortran 代码,并依靠编译器为设备生成并行代码。底层计算或图形 API 和驱动程序仍然存在并且仍在使用,但您看不到它们。

【讨论】:

  • 我想直接对gpu进行编程。例如添加 2 个数字。由于 cuda 和 opencl 将其代码更改为汇编,因此应该有办法。你知道gpu上的汇编编码和直接访问gpu吗?
  • 汇编编码 - 是的:github.com/NervanaSystems/maxas 但直接访问意味着您将重新实现部分视频驱动程序。你真的想要吗?如果您确实需要可以从任何 C 编译器中使用的库 - 查看 OpenCL
【解决方案2】:

没有办法将 C 直接编译为 gpu。但是,您可以编写自己的着色器并使用它来进行计算。看看 HLSL 和 GLSL。

【讨论】:

  • 不会通过 Direct3D 或 OpenGL 使用着色器语言算作“使用库或 API”吗?
  • @talonmies 嗯,是的。因此“没有办法将 C 直接编译为 gpu”;)
猜你喜欢
  • 2020-09-26
  • 2013-08-03
  • 2013-05-02
  • 2021-09-28
  • 1970-01-01
  • 2018-06-07
  • 2010-12-17
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多