在GPU(Intel Sandy Bridge)上加载代码

7
我的问题并不是关于GPGPU的。我相当了解GPGPU,这不是我想要的东西。据说英特尔的Sandy Bridge有一些功能可以让你直接在GPU上执行计算,这是真的吗?
我计划编写的代码将使用C中的内联汇编。是否有汇编指令可以将执行内容推送到GPU而非CPU上执行?
以下是一些相关文档: PDF中包含有指令集。
2个回答

3
我认为你提供的PDF中详细描述的指令集不能直接从"用户空间"中使用。这是您操作系统上的GPU驱动程序可能使用的内容,以实现OpenGL和DirectX等更高级别的接口。
值得注意的是,Sandy Bridge GPU相当弱。它不支持OpenCL,这是由ATI / Nvidia支持的标准GPGPU库。我建议你在支持它的硬件上编写到该库的程序,因为它比尝试编写你正在查看的裸机接口更具可移植性(并且更容易使用!)。
*:有可能存在与Intel封闭源驱动程序中描述的不同的接口,尽管这种可能性很小。
**:OpenCL与OpenGL不同,尽管它是由同一组人设计的。

你在哪里看到SNB GPU支持OpenCL的信息? - Bahbar
我的错误;它不会。已更正。 - user149341

2

回答你的第一个问题:不,这是不正确的。

让我引用你提供的资源:

通过内存映射IO寄存器的直接接口和间接地解析CPU放置在内存中的指令,CPU控制着图形处理单元。(SB GPU手册第2.2章)

因此,在CPU上下文中没有GPU代码的直接执行。

对于你的第二个问题:“将东西推送到GPU”是通过mov指令完成的。目标是mem-mapped IO寄存器,源是你想要写入的内容。您可能需要插入一些“sfence”或类似的指令,以确保不会发生弱内存重排序。


这可能听起来非常愚蠢,但你引用的那部分,在哪本手册中找到的?所以我猜我需要做的是通过 CPU(?)实际上“将这些命令放入内存”。 - user813182
卷1,第1部分 - 在您链接的页面上的第一个。您可以使用CPU将要执行的GPU代码放置在内存中的某个位置。几乎与为CPU加载和执行程序相同。 - Gunther Piez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接