.\" -*- coding: UTF-8 -*- .\" Copyright 2006, International Business Machines Corp. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH spu_run 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم spu_run \- تنفيذ سياق SPU .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP /* تعريف ثوابت \fBSPU_*\fP */ \fB#include \fP /* تعريف ثوابت \fBSYS_*\fP */ \fB#include \fP .P \fBint syscall(SYS_spu_run, int \fP\fIfd\fP\fB, uint32_t *\fP\fInpc\fP\fB, uint32_t *\fP\fIevent\fP\fB);\fP .fi .P \fIملاحظة\fP: لا توفر glibc غلافًا لـ \fBspu_run\fP()، مما يستلزم استخدام \fBsyscall\fP(2). .SH الوصف تُستخدم استدعاء النظام \fBspu_run\fP() على أجهزة PowerPC التي تنفذ بنية Cell Broadband Engine للوصول إلى وحدات المعالجة التآزرية (SPUs). وسيطة \fIfd\fP هي واصف ملف يُرجع بواسطة \fBspu_create\fP(2) يشير إلى سياق SPU محدد. عندما يُجدول السياق إلى SPU فعلي، يبدأ التنفيذ عند مؤشر التعليمات المُمرر في \fInpc\fP. .P يحدث تنفيذ كود SPU بشكل متزامن، مما يعني أن \fBspu_run\fP() يُحجب بينما لا يزال SPU قيد التشغيل. إذا كانت هناك حاجة لتنفيذ كود SPU بالتوازي مع كود آخر على وحدة المعالجة المركزية الرئيسية أو SPUs أخرى، فيجب إنشاء خيط تنفيذ جديد أولاً (مثل استخدام \fBpthread_create\fP(3)). .P عندما يُرجع \fBspu_run\fP()، تُكتب القيمة الحالية لعداد برنامج SPU إلى \fInpc\fP، لذا يمكن للاستدعاءات المتعاقبة لـ \fBspu_run\fP() استخدام نفس المؤشر \fInpc\fP. .P توفر وسيطة \fIevent\fP مخزنًا مؤقتًا لرمز حالة ممتد. إذا أُنشئ سياق SPU مع العلم \fBSPU_CREATE_EVENTS_ENABLED\fP، فإن نواة لينكس تملأ هذا المخزن المؤقت قبل أن يُرجع \fBspu_run\fP(). .P قد يكون رمز الحالة واحدًا (أو أكثر) من الثوابت التالية: .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 نُفذت تعليمة غير قانونية. .P NULL قيمة صالحة لوسيطة \fIevent\fP. في هذه الحالة، لن تُبلغ الأحداث إلى العملية المستدعية. .SH "قيمة الإرجاع" عند النجاح، يُرجع \fBspu_run\fP() قيمة سجل \fIspu_status\fP. عند الفشل، يُرجع \-1 ويُعيِّن \fIerrno\fP للإشارة إلى الخطأ. .P قيمة سجل \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. .P إذا لم يُرجع \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 لم تكن هناك ذاكرة كافية متاحة لمعالجة خطأ صفحة ناتج عن وصول مباشر للذاكرة من وحدة التحكم في تدفق الذاكرة (MFC). .TP \fBENOSYS\fP هذه الوظيفة غير مقدمة من قبل النظام الحالي، لأن الأجهزة لا توفر وحدات SPUs أو لأن وحدة spufs غير محملة. .SH المعايير لينكس على PowerPC. .SH التاريخ لينكس 2.6.16. .SH ملاحظات \fBspu_run\fP() مخصص للاستخدام من المكتبات التي تنفذ واجهة أكثر تجريدًا لـ SPUs، وليس للاستخدام من التطبيقات العادية. انظر .UR http:\://www.bsc.es\:/projects\:/deepcomputing\:/linuxoncell/ .UE للمكتبات الموصى بها. .SH أمثلة التالي مثال على تشغيل برنامج SPU بسيط ذو تعليمة واحدة باستخدام استدعاء النظام \fBspu_run\fP(). .P .\" 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"); \& /* * اكتب تعليمة \[aq]stop 0x1234\[aq] إلى ذاكرة * التخزين المحلي لـ SPU. */ instruction = 0x00001234; \& fd = open("/spu/example\-context/mem", O_RDWR); if (fd == \-1) err(EXIT_FAILURE, "open"); write(fd, &instruction, sizeof(instruction)); \& /* * اضبط npc على عنوان تعليمة البداية لبرنامج * SPU. نظرًا لأننا كتبنا التعليمة في بداية * ملف mem، فإن نقطة الدخول ستكون 0x0. */ npc = 0; \& spu_status = syscall(SYS_spu_run, context, &npc, NULL); if (spu_status == \-1) err(EXIT_FAILURE, "open"); \& /* * يجب أن نرى رمز حالة 0x12340002: * 0x00000002 (تم إيقاف spu بسبب stop\-and\-signal) * | 0x12340000 (رمز stop\-and\-signal) */ printf("SPU Status: %#08x\[rs]n", 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 ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .