spu_run() - Unix、Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

spu_run() - Unix、Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

spu_run - 执行 spu 上下文

语法

#include <sys/spu.h> 

int spu_run(int fd, unsigned int *npc, unsigned int *event);

描述

spu_run 系统调用用于实现 Cell 宽带引擎架构的 PowerPC 机器,以便访问协同处理器单元 (SPU)。它使用从 spu_create(2) 返回的 fd 来寻址特定的 SPU 上下文。当上下文被调度到物理 SPU 时,它将在传递给 npc 的指令指针处开始执行。

SPU 代码的执行是同步的,这意味着在 SPU 仍在运行时,spu_run 不会返回。如果需要与主 CPU 或其他 SPU 上的其他代码并行执行 SPU 代码,则需要首先创建一个新的执行线程,例如使用 pthread_create(3) 调用。

spu_run 返回时,SPU 指令指针的当前值将写回 npc,因此您可以在不更新指针的情况下再次调用 spu_run

event 可以是 NULL 指针,也可以指向一个扩展状态码,该状态码在 spu_run 返回时填充。它可以是以下常量之一

标签描述
SPE_EVENT_DMA_ALIGNMENT
 DMA 对齐错误
SPE_EVENT_SPE_DATA_SEGMENT
 DMA 分段错误
SPE_EVENT_SPE_DATA_STORAGE
 DMA 存储错误
如果将 NULL 作为 event 参数传递,则这些错误将导致向调用进程发送信号。

返回值

spu_run 返回 spu_status 寄存器的值,或返回 -1 以指示错误并将 errno 设置为下面列出的错误代码之一。spu_status 寄存器值包含状态码的位掩码,以及可选地从 SPU 上的 stop-and-signal 指令返回的 14 位代码。状态码的位掩码为
标签描述
0x02 SPU 被 stop-and-signal 停止。
0x04 SPU 被 halt 停止。
0x08 SPU 正在等待通道。
0x10 SPU 处于单步模式。
0x20 SPU 尝试执行无效指令。
0x40 SPU 尝试访问无效通道。
0x3fff0000
 使用此值掩码的位包含从 stop-and-signal 返回的代码。
始终设置一个或多个较低的八位,或者从 spu_run 返回错误代码。

错误

标签描述
EAGAINEWOULDBLOCK
  fd 处于非阻塞模式,并且 spu_run 将阻塞。
EBADF fd 不是有效的文件描述符。
EFAULT npc 不是有效的指针,或者 status 不是 NULL 也不是有效的指针。
EINTR spu_run 正在进行时发生信号。如果需要,npc 值已更新为新的程序计数器值。
EINVAL fd 不是从 spu_create(2) 返回的文件描述符。
ENOMEM 没有足够的内存来处理由 MFC 直接内存访问导致的页面错误。
ENOSYS 当前系统未提供此功能,因为硬件未提供 SPU 或未加载 spufs 模块。

备注

spu_run 旨在用于实现更抽象的 SPU 接口的库,而不是用于常规应用程序。

符合标准

此调用是 Linux 特定的,并且仅由 ppc64 架构实现。使用此系统调用的程序不可移植。

错误

代码尚未完全实现此处概述的所有功能。

作者

Arnd Bergmann <[email protected]>

参见



previous next Printer Friendly

广告


  

广告



广告