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 <arndb@de.ibm.com>

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.