OSDN Git Service

Import translated manuals from JM CVS Repository.
[linuxjm/jm.git] / manual / LDP_man-pages / draft / man2 / spu_run.2
1 .\" Copyright (c) International Business Machines Corp., 2006
2 .\"
3 .\" This program is free software; you can redistribute it and/or
4 .\" modify it under the terms of the GNU General Public License as
5 .\" published by the Free Software Foundation; either version 2 of
6 .\" the License, or (at your option) any later version.
7 .\"
8 .\" This program is distributed in the hope that it will be useful,
9 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
10 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
11 .\" the GNU General Public License for more details.
12 .\"
13 .\" You should have received a copy of the GNU General Public License
14 .\" along with this program; if not, write to the Free Software
15 .\" Foundation, Inc., 59 Temple Place, Suite 330, Boston,
16 .\" MA 02111-1307 USA
17 .\"
18 .\" HISTORY:
19 .\" 2005-09-28, created by Arnd Bergmann <arndb@de.ibm.com>
20 .\" 2006-06-16, revised by Eduardo M. Fleury <efleury@br.ibm.com>
21 .\" 2007-07-10, some polishing by mtk
22 .\" 2007-09-28, updates for newer kernels, added example
23 .\"             by Jeremy Kerr <jk@ozlabs.org>
24 .\"
25 .\" Japanese Version Copyright (c) 2007  Akihiro MOTOKI
26 .\"         all rights reserved.
27 .\" Translated 2007-10-19, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
28 .\" Updated 2008-11-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.04
29 .\" 
30 .TH SPU_RUN 2 2007-11-25 Linux "Linux Programmer's Manual"
31 .\"O .SH NAME
32 .SH Ì¾Á°
33 .\"O spu_run \- execute an SPU context
34 spu_run \- SPU ¥³¥ó¥Æ¥­¥¹¥È¤ò¼Â¹Ô¤¹¤ë
35 .\"O .SH SYNOPSIS
36 .SH ½ñ¼°
37 .nf
38 .B #include <sys/spu.h>
39
40 .BI "int spu_run(int " fd ", unsigned int *" npc \
41 ", unsigned int *" event ");"
42 .fi
43 .\"O .SH DESCRIPTION
44 .SH ÀâÌÀ
45 .\"O The
46 .\"O .BR spu_run ()
47 .\"O system call is used on PowerPC machines that implement the
48 .\"O Cell Broadband Engine Architecture in order to access Synergistic
49 .\"O Processor Units (SPUs).
50 .\"O The
51 .\"O .I fd
52 .\"O argument is a file descriptor returned by
53 .\"O .BR spu_create (2)
54 .\"O that refers to a specific SPU context.
55 .\"O When the context gets scheduled to a physical SPU,
56 .\"O it starts execution at the instruction pointer passed in
57 .\"O .IR npc .
58 .BR spu_run ()
59 ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢Cell Broadband Engine ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤ò¼ÂÁõ¤·¤¿
60 PowerPC ¥Þ¥·¥ó¤Ç Synergistic Processor Units (SPU) ¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Ë
61 »ÈÍѤµ¤ì¤ë¡£
62 .I fd
63 °ú¤­¿ô¤Ï¡¢
64 .BR spu_create (2)
65 ¤¬ÊÖ¤¹¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¡¢
66 ÆÃÄê¤Î SPU ¥³¥ó¥Æ¥­¥¹¥È¤ò»²¾È¤¹¤ë¡£
67 ¤½¤Î¥³¥ó¥Æ¥­¥¹¥È¤¬ÊªÍý SPU ¤Ë³ä¤êÅö¤Æ¤é¤ì¤ë¤È¡¢
68 .I npc
69 ¤ÇÅϤµ¤ì¤¿Ì¿Îá¥Ý¥¤¥ó¥¿ (instruction pointer) ¤«¤é¼Â¹Ô¤¬³«»Ï¤µ¤ì¤ë¡£
70
71 .\"O Execution of SPU code happens synchronously, meaning that
72 .\"O .BR spu_run ()
73 .\"O blocks while the SPU is still running.
74 .\"O If there is a need
75 .\"O to execute SPU code in parallel with other code on either the
76 .\"O main CPU or other SPUs, a new thread of execution must be created
77 .\"O first (e.g., using
78 .\"O .BR pthread_create (3)).
79 SPU ¥³¡¼¥É¤Î¼Â¹Ô¤ÏƱ´üŪ (synchronously) ¤Ë¹Ô¤ï¤ì¤ë¡¢¤Ä¤Þ¤ê
80 SPU ¤¬¼Â¹ÔÃæ¤Ï
81 .BR spu_run ()
82 ¤ÏÄä»ß (block) ¤¹¤ë¡£
83 SPU ¥³¡¼¥É¤Î¼Â¹Ô¤ò¥á¥¤¥ó CPU ¤ä¾¤Î SPU ¤ÈʹԤ·¤Æ¹Ô¤¦É¬Íפ¬¤¢¤ë¾ì¹ç¤Ï¡¢
84 ºÇ½é¤Ë¡¢¤½¤Î SPU ¥³¡¼¥É¤ò¼Â¹Ô¤¹¤ë¿·¤·¤¤¥¹¥ì¥Ã¥É¤ò¡¢(Î㤨¤Ð
85 .BR pthread_create (3)
86 ¤Ê¤É¤ò»È¤Ã¤Æ) À¸À®¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
87
88 .\"O When
89 .\"O .BR spu_run ()
90 .\"O returns, the current value of the SPU program counter is written to
91 .\"O .IR npc ,
92 .\"O so successive calls to
93 .\"O .BR spu_run ()
94 .\"O can use the same
95 .\"O .I npc
96 .\"O pointer.
97 .BR spu_run ()
98 ¤¬ÊÖ¤ë¤È¤­¤Ë¤Ï¡¢SPU ¤Î¥×¥í¥°¥é¥à¥«¥¦¥ó¥¿¤Î¸½ºßÃͤ¬
99 .I npc
100 ¤Ë½ñ¤­¹þ¤Þ¤ì¤ë¡£
101 ¤³¤ì¤Ë¤è¤ê¡¢Ï¢Â³¤¹¤ë
102 .BR spu_run ()
103 ¤Î¸Æ¤Ó½Ð¤·¤ÇƱ¤¸
104 .I npc
105 ¥Ý¥¤¥ó¥¿¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£
106
107 .\"O The
108 .\"O .I event
109 .\"O argument provides a buffer for an extended status code.
110 .\"O If the SPU
111 .\"O context was created with the
112 .\"O .B SPU_CREATE_EVENTS_ENABLED
113 .\"O flag, then this buffer is populated by the Linux kernel before
114 .\"O .BR spu_run ()
115 .\"O returns.
116 .I event
117 °ú¤­¿ô¤Ë¤Ï¡¢³ÈÄ¥¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥ÉÍѤΥХåե¡¤ò»ØÄꤹ¤ë¡£
118 .B SPU_CREATE_EVENTS_ENABLED
119 ¥Õ¥é¥°ÉÕ¤­¤Ç SPU ¥³¥ó¥Æ¥­¥¹¥È¤¬ºîÀ®¤µ¤ì¤ë¤È¡¢
120 .BR spu_run ()
121 ¤¬ÊÖ¤ëÁ°¤Ë Linux ¥«¡¼¥Í¥ë¤Ë¤è¤ê¤³¤Î¥Ð¥Ã¥Õ¥¡¤Ë
122 ³ÈÄ¥¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤¬³ÊǼ¤µ¤ì¤ë¡£
123
124 .\"O The status code may be one (or more) of the following constants:
125 ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤Ë¤Ï°Ê²¼¤ÎÄê¿ô¤¬°ì¤Ä°Ê¾åÆþ¤ë¡£
126 .TP
127 .B SPE_EVENT_DMA_ALIGNMENT
128 .\"O A DMA alignment error occurred.
129 DMA (direct memory access) ¤Î¥¢¥é¥¤¥á¥ó¥È¡¦¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
130 .TP
131 .B SPE_EVENT_INVALID_DMA
132 .\"O An invalid MFC DMA command was attempted.
133 ̵¸ú¤Ê MFC (Memory Flow Controller) DMA ¥³¥Þ¥ó¥É¤ò¹Ô¤ª¤¦¤È¤·¤¿¡£
134 .TP
135 .B SPE_EVENT_SPE_DATA_STORAGE
136 .\"O A DMA storage error occurred.
137 DMA ¥¹¥È¥ì¡¼¥¸¡¦¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
138 .TP
139 .B SPE_EVENT_SPE_ERROR
140 .\"O An illegal instruction was executed.
141 ÉÔÀµ¤ÊÌ¿Î᤬¼Â¹Ô¤µ¤ì¤¿¡£
142 .PP
143 .\"O NULL
144 .\"O is a valid value for the
145 .\"O .I event
146 .\"O argument.
147 .\"O In this case, the events will not be reported to the calling process.
148 NULL ¤Ï
149 .I event
150 °ú¤­¿ô¤È¤·¤ÆÍ­¸ú¤ÊÃͤǤ¢¤ë¡£
151 ¤³¤Î¾ì¹ç¡¢¥¤¥Ù¥ó¥È¤Ï¸Æ¤Ó½Ð¤·¸µ¤Î¥×¥í¥»¥¹¤ËÊó¹ð¤µ¤ì¤Ê¤¤¡£
152 .\"O .SH RETURN VALUE
153 .SH ÊÖ¤êÃÍ
154 .\"O On success,
155 .\"O .BR spu_run ()
156 .\"O returns the value of the
157 .\"O .I spu_status
158 .\"O register.
159 .\"O On error it returns \-1 and sets
160 .\"O .I errno
161 .\"O to one of the error codes listed below.
162 À®¸ù¤¹¤ë¤È¡¢
163 .BR spu_run ()
164 ¤Ï
165 .I spu_status
166 ¥ì¥¸¥¹¥¿¤ÎÃͤòÊÖ¤¹¡£
167 ¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤òÊÖ¤·¡¢
168 .I errno
169 ¤ò²¼µ­¤Î¥¨¥é¡¼¥³¡¼¥É¤Î¤¤¤º¤ì¤«¤ËÀßÄꤹ¤ë¡£
170
171 .\"O The
172 .\"O .I spu_status
173 .\"O register value is a bit mask of status codes and
174 .\"O optionally a 14-bit code returned from the
175 .\"O .BR stop-and-signal
176 .\"O instruction on the SPU.
177 .\"O The bit masks for the status codes
178 .\"O are:
179 .I spu_status
180 ¥ì¥¸¥¹¥¿¤ÎÃͤϡ¢¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤È SPU ¤Î
181 .B stop-and-signal
182 Ì¿Î᤬ÊÖ¤¹ 14 ¥Ó¥Ã¥È¤Î¥³¡¼¥É¤Î
183 ¥Ó¥Ã¥È¥Þ¥¹¥¯¤Ç¹½À®¤µ¤ì¤ë¡£
184 ¸å¼Ô¤Î 14 ¥Ó¥Ã¥È¤Î¥³¡¼¥É¤Ï¥ª¥×¥·¥ç¥ó¤Ç¤¢¤ë¡£
185 ¥¹¥Æ¡¼¥¿¥¹¥³¡¼¥É¤Î¥Ó¥Ã¥È¥Þ¥¹¥¯¤Ï²¼µ­¤ÎÄ̤ê¤Ç¤¢¤ë¡£
186 .TP
187 .B 0x02
188 .\"O SPU was stopped by a
189 .\"O .BR stop-and-signal
190 .\"O instruction.
191 SPU ¤¬
192 .B stop-and-signal
193 Ì¿Îá¤ÇÄä»ß¤·¤¿¡£
194 .TP
195 .B 0x04
196 .\"O SPU was stopped by a
197 .\"O .BR halt
198 .\"O instruction.
199 SPU ¤¬
200 .B "halt (Ää»ß)"
201 Ì¿Îá¤Ç»ß¤Þ¤Ã¤¿¡£
202 .TP
203 .B 0x08
204 .\"O SPU is waiting for a channel.
205 SPU ¤Ï¥Á¥ã¥ó¥Í¥ë¤Î¥¦¥§¥¤¥ÈÃæ¤Ç¤¢¤ë¡£
206 .TP
207 .B 0x10
208 .\"O SPU is in single-step mode.
209 SPU ¤Ï¥·¥ó¥°¥ë¥¹¥Æ¥Ã¥×¥â¡¼¥É¤Ç¤¢¤Ã¤¿¡£
210 .TP
211 .B 0x20
212 .\"O SPU has tried to execute an invalid instruction.
213 SPU ¤¬ÉÔÀµ¤ÊÌ¿Îá¤ò¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¡£
214 .TP
215 .B 0x40
216 .\"O SPU has tried to access an invalid channel.
217 SPU ¤¬ÉÔÀµ¤Ê¥Á¥ã¥ó¥Í¥ë¤Ë¥¢¥¯¥»¥¹¤·¤è¤¦¤È¤·¤¿¡£
218 .TP
219 .B 0x3fff0000
220 .\"O The bits masked with this value contain the code returned from a
221 .\"O .BR stop-and-signal
222 .\"O instruction.
223 .\"O These bits are only valid if the 0x02 bit is set.
224 ¤³¤ÎÃͤΥޥ¹¥¯¤òŬÍѤ·¤ÆÆÀ¤é¤ì¤¿¥Ó¥Ã¥ÈÃͤˤϡ¢
225 stop-and-signal Ì¿Îᤫ¤éÊÖ¤µ¤ì¤¿¥³¡¼¥É¤¬Æþ¤Ã¤Æ¤¤¤ë¡£
226 ¤³¤ì¤é¤Î¥Ó¥Ã¥È¤Ï 0x02 ¥Ó¥Ã¥È¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Î¤ßÍ­¸ú¤Ç¤¢¤ë¡£
227 .PP
228 .\"O If
229 .\"O .BR spu_run ()
230 .\"O has not returned an error, one or more bits among the lower eight
231 .\"O ones are always set.
232 .BR spu_run ()
233 ¤¬¥¨¥é¡¼¤òÊÖ¤µ¤Ê¤«¤Ã¤¿¾ì¹ç¡¢²¼°Ì 8 ¥Ó¥Ã¥È¤Î¤¦¤Á 1 ¤Ä°Ê¾å¤Ï
234 ¾ï¤Ë¥»¥Ã¥È¤µ¤ì¤ë¡£
235 .\"O .SH ERRORS
236 .SH ¥¨¥é¡¼
237 .TP
238 .B EBADF
239 .\"O .I fd
240 .\"O is not a valid file descriptor.
241 .I fd
242 ¤¬Í­¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤¤¡£
243 .TP
244 .B EFAULT
245 .\"O .I npc
246 .\"O is not a valid pointer, or
247 .\"O .I event
248 .\"O is non-NULL and an invalid pointer.
249 .I npc
250 ¤¬Í­¸ú¤Ê¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¤¡£¤Þ¤¿¤Ï
251 .I event
252 ¤¬ NULL °Ê³°¤Ç¡¢¤·¤«¤â̵¸ú¤Ê¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
253 .TP
254 .B EINTR
255 .\"O A signal occurred while
256 .\"O .BR spu_run ()
257 .\"O was in progress; see
258 .\"O .BR signal (7).
259 .\"O The
260 .\"O .I npc
261 .\"O value has been updated to the new program counter value if
262 .\"O necessary.
263 .BR spu_run ()
264 ¤Î¼Â¹ÔÃæ¤Ë¥·¥°¥Ê¥ë¤¬È¯À¸¤·¤¿¡£
265 .BR signal (7)
266 »²¾È¡£
267 ɬÍפǤ¢¤ì¤Ð¡¢
268 .I npc
269 ¤ÎÃͤϿ·¤·¤¤¥×¥í¥°¥é¥à¥«¥¦¥ó¥¿¤ÎÃͤ˹¹¿·¤µ¤ì¤ë¡£
270 .TP
271 .B EINVAL
272 .\"O .I fd
273 .\"O is not a valid file descriptor returned from
274 .\"O .BR spu_create (2).
275 .I fd
276 ¤¬
277 .BR spu_create (2)
278 ¤¬ÊÖ¤·¤¿Í­¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤¤¡£
279 .TP
280 .B ENOMEM
281 .\"O There was not enough memory available to handle a page fault
282 .\"O resulting from a Memory Flow Controller (MFC) direct memory access.
283 Memory Flow Controller (MFC) DMA ¤Ë¤è¤êȯÀ¸¤·¤¿¥Ú¡¼¥¸¥Õ¥©¡¼¥ë¥È¤ò
284 ½èÍý¤¹¤ë¤Î¤ËɬÍפʥá¥â¥ê¤¬¤Ê¤«¤Ã¤¿¡£
285 .TP
286 .B ENOSYS
287 .\"O The functionality is not provided by the current system, because
288 .\"O either the hardware does not provide SPUs or the spufs module is not
289 .\"O loaded.
290 µ¡Ç½¤¬Æ°ºîÃæ¤Î¥·¥¹¥Æ¥à¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Ê¤¤¡£Íýͳ¤Ï¡¢
291 ¥Ï¡¼¥É¥¦¥§¥¢¤Ç SPU ¤¬Ä󶡤µ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢
292 spufs ¥â¥¸¥å¡¼¥ë¤¬¥í¡¼¥É¤µ¤ì¤Æ¤¤¤Ê¤¤¤«¡¢¤Î¤É¤Á¤é¤«¤Ç¤¢¤ë¡£
293 .\"O .SH VERSIONS
294 .SH ¥Ð¡¼¥¸¥ç¥ó
295 .\"O The
296 .\"O .BR spu_run ()
297 .\"O system call was added to Linux in kernel 2.6.16.
298 .BR spu_run ()
299 ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¥«¡¼¥Í¥ë 2.6.16 ¤Ç Linux ¤ËÄɲ䵤줿¡£
300 .\"O .SH CONFORMING TO
301 .SH ½àµò
302 .\"O This call is Linux-specific and only implemented by the PowerPC
303 .\"O architecture.
304 .\"O Programs using this system call are not portable.
305 ¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux ¸ÇÍ­¤Ç¤¢¤ê¡¢
306 PowerPC ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç¤Î¤ß¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£
307 ¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤Ã¤¿¥×¥í¥°¥é¥à¤Ï°Ü¿¢À­¤¬¤Ê¤¤¡£
308 .\"O .SH NOTES
309 .SH Ãí°Õ
310 .\"O Glibc does not provide a wrapper for this system call; call it using
311 .\"O .BR syscall (2).
312 .\"O Note however, that
313 .\"O .BR spu_run ()
314 .\"O is meant to be used from libraries that implement a more abstract
315 .\"O interface to SPUs, not to be used from regular applications.
316 .\"O See
317 .\"O .I http://www.bsc.es/projects/deepcomputing/linuxoncell/
318 .\"O for the recommended libraries.
319 glibc ¤Ï¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÂФ¹¤ë¥é¥Ã¥Ñ¡¼´Ø¿ô¤òÄ󶡤·¤Æ¤¤¤Ê¤¤¡£
320 .BR syscall (2)
321 ¤ò»È¤¦¤³¤È¡£¤¿¤À¤·¡¢
322 .BR spu_run ()
323 ¤Ï ¤è¤êÃê¾ÝÅ٤ι⤤ SPU ¤Ø¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¥é¥¤¥Ö¥é¥ê¤«¤é
324 ÍøÍѤµ¤ì¤ë¤³¤È¤ò°Õ¿Þ¤·¤¿¤â¤Î¤Ç¤¢¤ê¡¢Ä̾ï¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é
325 »ÈÍѤϰտޤµ¤ì¤Æ¤¤¤Ê¤¤¡£¿ä¾©¤Î¥é¥¤¥Ö¥é¥ê¤Ë¤Ä¤¤¤Æ¤Ï
326 .I http://www.bsc.es/projects/deepcomputing/linuxoncell/
327 ¤ò»²¾È¤Î¤³¤È¡£
328 .\"O .SH EXAMPLE
329 .SH Îã
330 .\"O The following is an example of running a simple, one-instruction SPU
331 .\"O program with the
332 .\"O .BR spu_run ()
333 .\"O system call.
334 °Ê²¼¤Ï¡¢´Êñ¤Ê 1 Ì¿Îá¤Î SPU ¥×¥í¥°¥é¥à¤ò
335 .BR spu_run ()
336 ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤Ã¤Æ¼Â¹Ô¤µ¤»¤ëÎã¤Ç¤¢¤ë¡£
337
338 .nf
339 #include <stdlib.h>
340 #include <stdint.h>
341 #include <unistd.h>
342 #include <stdio.h>
343 #include <sys/types.h>
344 #include <fcntl.h>
345
346 #define handle_error(msg) \\
347     do { perror(msg); exit(EXIT_FAILURE); } while (0)
348
349 int main(void)
350 {
351     int context, fd, spu_status;
352     uint32_t instruction, npc;
353
354     context = spu_create("/spu/example\-context", 0, 0755);
355     if (context == -1)
356         handle_error("spu_create");
357
358     /* write a \(aqstop 0x1234\(aq instruction to the SPU\(aqs
359      * local store memory
360      */
361     instruction = 0x00001234;
362
363     fd = open("/spu/example\-context/mem", O_RDWR);
364     if (fd == -1)
365         handle_error("open");
366     write(fd, &instruction, sizeof(instruction));
367
368     /* set npc to the starting instruction address of the
369      * SPU program. Since we wrote the instruction at the
370      * start of the mem file, the entry point will be 0x0
371      */
372     npc = 0;
373
374     spu_status = spu_run(context, &npc, NULL);
375     if (spu_status == -1)
376         handle_error("open");
377
378     /* we should see a status code of 0x1234002:
379      *   0x00000002 (spu was stopped due to stop\-and\-signal)
380      * | 0x12340000 (the stop\-and\-signal code)
381      */
382     printf("SPU Status: 0x%08x\\n", spu_status);
383
384     exit(EXIT_SUCCESS);
385 }
386 .fi
387 .\" .SH AUTHORS
388 .\" Arnd Bergmann <arndb@de.ibm.com>, Jeremy Kerr <jk@ozlabs.org>
389 .\"O .SH SEE ALSO
390 .SH ´ØÏ¢¹àÌÜ
391 .BR close (2),
392 .BR spu_create (2),
393 .BR capabilities (7),
394 .BR spufs (7)