2015-11-23 26 views
1

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

+1

您是否想要开发可以通过PCI与GPU进行通信的硬件,以避免PC BIOS的帮助? – MikeCAT

+0

或允许BIOS或UEFI只加载和启动您的代码,然后直接访问I/O端口或什么? – MikeCAT

+1

@MikeCAT OpenCL和/或CUDA不是硬件 - 它只是一个简单,全面和标准化的GPGPU接口。很抱歉代替TS说话,但似乎他只是想问如何直接与GPGPU互连,而没有任何现有的接口。 – Slav

回答

3

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

关于废除使用底层硬件API的最近(可能是唯一)的事情是GPU的编译辅助并行机制,如OpenACC。在那里,您可以使用预处理器指令来修饰C,C++或Fortran代码,并依靠编译器为设备生成并行代码。底层的计算或图形API和驱动程序仍然在使用中,但是您没有看到它们。

+0

我想直接编程到GPU。例如添加2个数字。因为cuda和opencl将代码更改为程序集,应该有办法。你知道关于gpu的汇编代码并直接访问gpu吗? –

+0

汇编代码 - 是:https://github.com/NervanaSystems/maxas 但直接访问意味着您将重新实现部分视频驱动程序。你真的想要吗? 如果您确实需要可以从任何C编译器使用的库 - 请查看OpenCL – Bulat

-1

无法将C直接编译到GPU。但是,您可以编写自己的着色器并使用它进行计算。看看HLSL和GLSL。

+3

不会使用着色器语言通过Direct3D或OpenGL计数作为“使用库或API”? – talonmies

+0

@talonmies嗯,是的。因此“没有办法直接编译C到一个GPU”;) – JSQuareD