.\" -*- coding: UTF-8 -*- .\" Copyright (c) International Business Machines Corp., 2006 .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" HISTORY: .\" 2005-09-28, created by Arnd Bergmann .\" 2006-06-16, revised by Eduardo M. Fleury .\" 2007-07-10, some polishing by mtk .\" 2007-09-28, updates for newer kernels, added example .\" by Jeremy Kerr .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH spu_run 2 "3 мая 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ spu_run \- выполняет контекст SPU .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP /* определения констант \fBSPU_*\fP */ \fB#include \fP /* определения констант \fBSYS_*\fP */ \fB#include \fP .PP \fBint syscall(SYS_spu_run, int \fP\fIfd\fP\fB, uint32_t *\fP\fInpc\fP\fB, uint32_t *\fP\fIevent\fP\fB);\fP .fi .PP \fINote\fP: glibc provides no wrapper for \fBspu_run\fP(), necessitating the use of \fBsyscall\fP(2). .SH ОПИСАНИЕ Системный вызов \fBspu_run\fP() используется на машинах PowerPC с архитектурой Cell Broadband Engine для получения доступа к Synergistic Processor Unit (SPU). Аргумент \fIfd\fP представляет собой файловый дескриптор, возвращаемый вызовом \fBspu_create\fP(2) и указывающий на определённый контекст SPU. Когда контекст планируется на физическом SPU, он запускается на выполнение начиная с инструкции, на которую указывает значение \fInpc\fP. .PP Выполнение кода SPU происходит синхронно, то есть \fBspu_run\fP() блокируется на время работы SPU. Если требуется параллельное выполнение кода SPU и кода на основном процессоре или других SPU, то сначала нужно создать новую нить выполнения (например с помощью \fBpthread_create\fP(3)). .PP При завершении работы \fBspu_run\fP() текущее значение программного счётчика SPU записывается в \fInpc\fP, что позволяет использовать тот же указатель \fInpc\fP в последующих вызовах \fBspu_run\fP(). .PP В аргументе \fIevent\fP указывается буфер для расширенного кода состояния. Если контекст SPU создан с флагом \fBSPU_CREATE_EVENTS_ENABLED\fP, то ядро Linux заполняет этот буфер перед возвратом из \fBspu_run\fP(). .PP Код состояния может быть одной (или несколькими) из следующих констант: .TP \fBSPE_EVENT_DMA_ALIGNMENT\fP Произошла ошибка выравнивания DMA. .TP \fBSPE_EVENT_INVALID_DMA\fP .\" SPE_EVENT_SPE_DATA_SEGMENT is defined, but does not seem to be generated .\" at any point (in Linux 5.9 sources). Попытка выполнить неверную команду MFC DMA. .TP \fBSPE_EVENT_SPE_DATA_STORAGE\fP Произошла ошибка хранилища DMA. .TP \fBSPE_EVENT_SPE_ERROR\fP Выполнена недопустимая инструкция. .PP Для аргумента \fIevent\fP допускается значение NULL. В этом случае информация о событиях не будет поступать в вызывающий процесс. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBspu_run\fP() returns the value of the \fIspu_status\fP register. On failure, it returns \-1 and sets \fIerrno\fP is set to indicate the error. .PP Значение регистра \fIspu_status\fP представляет собой битовую маску кодов состояния и необязательный 14\-битный код, возвращаемый при выполнении инструкции \fBstop\-and\-signal\fP SPU. Битовые маски кодов состояний: .TP \fB0x02\fP SPU остановлен инструкцией \fBstop\-and\-signal\fP. .TP \fB0x04\fP SPU остановлен инструкцией \fBhalt\fP. .TP \fB0x08\fP SPU ожидает канала. .TP \fB0x10\fP SPU в пошаговом режиме. .TP \fB0x20\fP SPU пытался выполнить неверную инструкцию. .TP \fB0x40\fP SPU пытался получить доступ к неверному каналу. .TP \fB0x3fff0000\fP При наложении этой маски получается код, возвращаемый инструкцией \fBstop\-and\-signal\fP. Полученные биты корректны только, если установлен бит 0x02. .PP Если \fBspu_run\fP() не вернул ошибку, то один или более младших восьми битов всегда установлены. .SH ОШИБКИ .TP \fBEBADF\fP Значение \fIfd\fP не является правильным файловым дескриптором. .TP \fBEFAULT\fP Задан неправильный указатель в \fInpc\fP или значение \fIevent\fP не равно NULL и является неправильным указателем. .TP \fBEINTR\fP При выполнении \fBspu_run\fP() получен сигнал; см. \fBsignal\fP(7). При необходимости, значение \fInpc\fP обновляется до нового значения программного счётчика. .TP \fBEINVAL\fP Значение \fIfd\fP не является правильным файловым дескриптором, возвращённым \fBspu_create\fP(2). .TP \fBENOMEM\fP Недостаточно памяти для обработки страничного сбоя в результате прямого доступа Memory Flow Controller (MFC). .TP \fBENOSYS\fP Возможность не предоставляется текущей системой, так как или аппаратура не предоставляет SPU, или не загружен модуль spufs. .SH СТАНДАРТЫ Linux on PowerPC. .SH ИСТОРИЯ Linux 2.6.16. .SH ЗАМЕЧАНИЯ \fBspu_run\fP() is meant to be used from libraries that implement a more abstract interface to SPUs, not to be used from regular applications. See .UR http://www.bsc.es\:/projects\:/deepcomputing\:/linuxoncell/ .UE for the recommended libraries. .SH ПРИМЕРЫ В следующем примере реализована простая программа, состоящая из одной инструкции SPU и системного вызова \fBspu_run\fP(). .PP .\" SRC BEGIN (spu_run.c) .EX #include #include #include #include #include #include #include \& int main(void) { int context, fd, spu_status; uint32_t instruction, npc; \& context = syscall(SYS_spu_create, "/spu/example\-context", 0, 0755); if (context == \-1) err(EXIT_FAILURE, "spu_create"); \& /* * Write a \[aq]stop 0x1234\[aq] instruction to the SPU\[aq]s * local store memory. */ instruction = 0x00001234; \& fd = open("/spu/example\-context/mem", O_RDWR); if (fd == \-1) err(EXIT_FAILURE, "open"); write(fd, &instruction, sizeof(instruction)); \& /* * set npc to the starting instruction address of the * SPU program. Since we wrote the instruction at the * start of the mem file, the entry point will be 0x0. */ npc = 0; \& spu_status = syscall(SYS_spu_run, context, &npc, NULL); if (spu_status == \-1) err(EXIT_FAILURE, "open"); \& /* * We should see a status code of 0x12340002: * 0x00000002 (spu was stopped due to stop\-and\-signal) * | 0x12340000 (the stop\-and\-signal code) */ printf("SPU Status: %#08x\en", spu_status); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .\" .SH AUTHORS .\" Arnd Bergmann , Jeremy Kerr .SH "СМ. ТАКЖЕ" \fBclose\fP(2), \fBspu_create\fP(2), \fBcapabilities\fP(7), \fBspufs\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .