Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(501)

Side by Side Diff: native_client_sdk/src/doc/faq.rst

Issue 51783002: PNaCl doc: Remove TODOs from FAQ, update perf numbers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 .. _faq: 1 .. _faq:
2 2
3 ########################## 3 ##########################
4 Frequently Asked Questions 4 Frequently Asked Questions
5 ########################## 5 ##########################
6 6
7 .. contents:: 7 .. contents::
8 :local: 8 :local:
9 :backlinks: none 9 :backlinks: none
10 :depth: 2 10 :depth: 2
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 model which adapts to novel attacks, without affecting 56 model which adapts to novel attacks, without affecting
57 already-released applications. 57 already-released applications.
58 * **Convenience:** Developers only need to ship a single ``.pexe`` file, 58 * **Convenience:** Developers only need to ship a single ``.pexe`` file,
59 not one ``.nexe`` file per supported architecture. 59 not one ``.nexe`` file per supported architecture.
60 * **Portability:** Developers and users don't need to worry about 60 * **Portability:** Developers and users don't need to worry about
61 already-released applications not working on new hardware: PNaCl 61 already-released applications not working on new hardware: PNaCl
62 already supports all architectures NaCl does, and as PNaCl evolves it 62 already supports all architectures NaCl does, and as PNaCl evolves it
63 gains support for new processors and fully uses their capabilities. 63 gains support for new processors and fully uses their capabilities.
64 64
65 .. TODO Expand on the PNaCl performance section in another document, and 65 .. TODO Expand on the PNaCl performance section in another document, and
66 .. link to it here. 66 .. link to it here. How does one profile PNaCl code? What are common
67 .. causes of slowness? How can code be made faster? What's the best way
68 .. to use Pepper's asynchronous APIs? What do I need to know about
69 .. threads and inter-thread communications? Can I use SIMD or other
70 .. processor-specific instructions? What aboutt he GPU?
67 71
68 For more details, refer to the :doc:`history behind and comparison of 72 For more details, refer to the :doc:`history behind and comparison of
69 NaCl and PNaCl <nacl-and-pnacl>`. 73 NaCl and PNaCl <nacl-and-pnacl>`.
70 74
71 When should I use Native Client? 75 When should I use Native Client?
72 -------------------------------- 76 --------------------------------
73 77
74 The following are some typical use cases. For details, see the 78 The following are some typical use cases. For details, see the
75 :doc:`Technical Overview <overview>`. 79 :doc:`Technical Overview <overview>`.
76 80
77 * Porting existing software components for use in a web application. 81 * Porting existing software components for use in a web application.
78 * Porting legacy desktop applications. 82 * Porting legacy desktop applications.
79 * Handling browser-side encryption and decryption for an enterprise 83 * Handling browser-side encryption and decryption for an enterprise
80 application. 84 application.
81 * Handling multimedia for a web application. 85 * Handling multimedia for a web application.
82 * Handling various aspects of web-based games, including physics engines 86 * Handling various aspects of web-based games, including physics engines
83 and AI. 87 and AI.
84 88
85 Native Client is a versatile technology; we expect that it will also be 89 Native Client is a versatile technology; we expect that it will also be
86 used in many other contexts outside of Chrome. 90 used in many other contexts outside of Chrome.
87 91
88 When should I use Portable Native Client? 92 When should I use Portable Native Client?
89 ----------------------------------------- 93 -----------------------------------------
90 94
91 See :doc:`NaCl and PNaCl <nacl-and-pnacl>`. In short: PNaCl works on the 95 See :doc:`NaCl and PNaCl <nacl-and-pnacl>`. In short: PNaCl works on the
92 open web whereas NaCl only works on the Chrome Web Store. 96 open web whereas NaCl only works on the Chrome Web Store.
93 97
94 How fast does code run in Native Client? 98 How fast does code run in Portable Native Client?
95 ---------------------------------------- 99 -------------------------------------------------
96 100
97 Fast! Benchmarks on x86-32 measured an average performance overhead of 101 Fast! The SPEC2k benchmarks (C, C++ and floating-point benchmarks) give
98 less than 5% compared to native C/C++ on applications such as Quake, 102 the following overhead for optimized PNaCl compared to regular optimized
99 bzip2, and Google Earth. For details of those benchmarks, see `Native 103 LLVM:
100 Client: A Sandbox for Portable, Untrusted x86 Code
101 <https://src.chromium.org/viewvc/native_client/data/docs_tarball/nacl/googleclie nt/native_client/documentation/nacl_paper.pdf>`_
102 (PDF).
103 104
104 Benchmarks on x86-64 and ARM measured an average performance overhead of 105 +--------+-----+
105 less than 5% on ARM and 7% on x86-64; however, benchmark performance was 106 | x86-32 | 15% |
106 bimodal for x86-64, so different use cases are likely to achieve either 107 +--------+-----+
107 significantly better or significantly worse performance than that 108 | x86-64 | 20% |
108 average. For details, see `Adapting Software Fault Isolation to 109 +--------+-----+
109 Contemporary CPU Architectures 110 | ARM | 10% |
110 <https://nativeclient.googlecode.com/svn/data/site/NaCl_SFI.pdf>`_ (PDF). 111 +--------+-----+
111 112
112 .. TODO Update performance numbers. 113 Note that benchmark performance is sometimes bimodal, so different use
114 cases are likely to achieve better or worse performance than the above
115 averages. For example floating-point heavy code usually exhibits much
116 lower overheads whereas very branch-heavy code often performs worse.
117
118 For details, see:
119
120 * `Adapting Software Fault Isolation to Contemporary CPU Architectures
121 <https://nativeclient.googlecode.com/svn/data/site/NaCl_SFI.pdf>`_
122 (PDF).
123 * `Native Client: A Sandbox for Portable, Untrusted x86 Code
124 <https://src.chromium.org/viewvc/native_client/data/docs_tarball/nacl/googlecl ient/native_client/documentation/nacl_paper.pdf>`_
125 (PDF).
113 126
114 If your code isn't performing as close to native speed as you'd expect, 127 If your code isn't performing as close to native speed as you'd expect,
115 :doc:`let us know <help>`! 128 :doc:`let us know <help>`!
116 129
130 .. TODO Link to the non-existent performance page! (see above todo).
131
117 Why use Portable Native Client instead of *<technology X>*? 132 Why use Portable Native Client instead of *<technology X>*?
118 ----------------------------------------------------------- 133 -----------------------------------------------------------
119 134
120 Many other technologies can be compared to Portable Native Client: 135 Many other technologies can be compared to Portable Native Client:
121 Flash, Java, Silverlight, ActiveX, .NET, asm.js, etc... 136 Flash, Java, Silverlight, ActiveX, .NET, asm.js, etc...
122 137
123 Different technologies have different strengths and weaknesses. In 138 Different technologies have different strengths and weaknesses. In
124 appropriate contexts, Portable Native Client can be faster, more secure, 139 appropriate contexts, Portable Native Client can be faster, more secure,
125 and/or more compatible across operating systems and architectures than 140 and/or more compatible across operating systems and architectures than
126 other technologies. 141 other technologies.
(...skipping 17 matching lines...) Expand all
144 ------------------------------------------------------------------------------- 159 -------------------------------------------------------------------------------
145 160
146 You can develop on Windows, Mac, or Linux, and the resulting Native 161 You can develop on Windows, Mac, or Linux, and the resulting Native
147 Client or Portable Native Client application will run inside the Google 162 Client or Portable Native Client application will run inside the Google
148 Chrome browser on all those platforms as well as ChromeOS. You can also 163 Chrome browser on all those platforms as well as ChromeOS. You can also
149 develop on ChromeOS with `Crouton 164 develop on ChromeOS with `Crouton
150 <https://github.com/dnschneid/crouton>`_, and we're working on 165 <https://github.com/dnschneid/crouton>`_, and we're working on
151 self-hosting a full development environment on Portable Native Client. 166 self-hosting a full development environment on Portable Native Client.
152 167
153 Any editor+shell combination should work as well as IDEs like Eclipse, 168 Any editor+shell combination should work as well as IDEs like Eclipse,
154 Visual Studio with the `Native Client Add-In 169 Visual Studio with the :doc:`Native Client Add-In
155 <https://developers.google.com/native-client/dev/devguide/devcycle/vs-addin>`_ 170 <devguide/devcycle/vs-addin>` on Windows, or Xcode on Mac OSX.
156 on Windows, or Xcode on Mac OSX.
157
158 .. TODO: update link to Visual Studio when ReST-ified.
159 171
160 I'm not familiar with native development tools, can I still use the Native Clien t SDK? 172 I'm not familiar with native development tools, can I still use the Native Clien t SDK?
161 -------------------------------------------------------------------------------- ------ 173 -------------------------------------------------------------------------------- ------
162 174
163 You may find our :doc:`Tutorial <devguide/tutorial/index>` and :doc:`Building 175 You may find our :doc:`Tutorial <devguide/tutorial/index>` and :doc:`Building
164 instructions <devguide/devcycle/building>` useful, and you can look at 176 instructions <devguide/devcycle/building>` useful, and you can look at
165 the code and Makefiles for the SDK examples to understand how the 177 the code and Makefiles for the SDK examples to understand how the
166 examples are built and run. 178 examples are built and run.
167 179
168 You'll need to learn how to use some tools (like GCC, LLVM, make, 180 You'll need to learn how to use some tools (like GCC, LLVM, make,
169 Eclipse, Visual Studio, or Xcode) before you can get very far with the 181 Eclipse, Visual Studio, or Xcode) before you can get very far with the
170 SDK. Try seaching for an `introduction to GCC 182 SDK. Try seaching for an `introduction to GCC
171 <https://www.google.com/search?q=gcc+introduction>`_. 183 <https://www.google.com/search?q=gcc+introduction>`_.
172 184
173 185
174 Openness, and Supported Architectures and Languages 186 Openness, and Supported Architectures and Languages
175 =================================================== 187 ===================================================
176 188
177 Is Native Client open? Is it a standard? 189 Is Native Client open? Is it a standard?
178 ---------------------------------------- 190 ----------------------------------------
179 191
180 Native Client is completely open: the executable format is open and the 192 Native Client is completely open: the executable format is open and the
181 `source code is open <https://code.google.com/p/nativeclient/>`_. Right 193 `source code is open <https://code.google.com/p/nativeclient/>`_. Right
182 now the Native Client project is in its early stages, so it's premature 194 now the Native Client project is in its early stages, so it's premature
183 to consider Native Client for standardization. 195 to consider Native Client for standardization.
184 196
185 We consistenly try to document our design and implementation and hope to 197 We consistenly try to document our design and implementation and hope to
186 standardize Portable Native Client when it gains more traction. A good 198 standardize Portable Native Client when it gains more traction. A good
187 example is our `PNaCl bitcode reference manual 199 example is our :doc:`PNaCl bitcode reference manual
188 <http://www.chromium.org/nativeclient/pnacl/bitcode-abi>`_. 200 <reference/pnacl-bitcode-abi>`.
189
190 .. TODO Update the above bitcode-abi link to a :doc: once 3693 is fixed.
191 201
192 What are the supported instruction set architectures? 202 What are the supported instruction set architectures?
193 ----------------------------------------------------- 203 -----------------------------------------------------
194 204
195 Portable Native Client uses an architecture-independent format (the 205 Portable Native Client uses an architecture-independent format (the
196 ``.pexe``) which can currently be translated to execute on processors 206 ``.pexe``) which can currently be translated to execute on processors
197 with the x86-32, x86-64, and ARM instruction set architectures, as well 207 with the x86-32, x86-64, and ARM instruction set architectures, as well
198 as experimental support for MIPS. As new architectures come along and 208 as experimental support for MIPS. As new architectures come along and
199 become popular we expect Portable Native Client to support them without 209 become popular we expect Portable Native Client to support them without
200 developers having to recompile their code. 210 developers having to recompile their code.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 Portable Native Client should support SIMD vectors in the near future. 277 Portable Native Client should support SIMD vectors in the near future.
268 278
269 Can I use Native Client for 3D graphics? 279 Can I use Native Client for 3D graphics?
270 ---------------------------------------- 280 ----------------------------------------
271 281
272 Yes. Native Client supports `OpenGL ES 2.0 282 Yes. Native Client supports `OpenGL ES 2.0
273 <https://www.khronos.org/opengles/>`_. 283 <https://www.khronos.org/opengles/>`_.
274 284
275 285
276 To alert the user regarding their hardware platform's 3D feature set 286 To alert the user regarding their hardware platform's 3D feature set
277 before loading a large NaCl application, see `Vetting the driver in 287 before loading a large NaCl application, see :doc:`Vetting the driver in
278 Javascript 288 Javascript <devguide/coding/3D-graphics>`.
279 <https://developers.google.com/native-client/devguide/coding/3D-graphics>`_.
280
281 .. TODO Update link to point to the right place in the document once
282 .. it's ReST-ified.
283 289
284 Some GL extensions are exposed to Native Client applications, see the 290 Some GL extensions are exposed to Native Client applications, see the
285 `GL ES 2 file 291 `GL ES 2 file
286 <https://src.chromium.org/viewvc/chrome/trunk/src/ppapi/lib/gl/gles2/gles2.c>`_. 292 <https://src.chromium.org/viewvc/chrome/trunk/src/ppapi/lib/gl/gles2/gles2.c>`_.
287 This file is part of the GL wrapper supplied by the library 293 This file is part of the GL wrapper supplied by the library
288 ``ppapi_gles2`` which you'll want to include in your project. In most 294 ``ppapi_gles2`` which you'll want to include in your project. In most
289 cases extensions map to extensions available on other platforms, or 295 cases extensions map to extensions available on other platforms, or
290 differ very slightly (if they differ, the extension is usually CHROMIUM 296 differ very slightly (if they differ, the extension is usually CHROMIUM
291 or ANGLE instead of EXT). 297 or ANGLE instead of EXT).
292 298
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 * The ``.nexe`` files must have been compiled using SDK version 0.5 or 567 * The ``.nexe`` files must have been compiled using SDK version 0.5 or
562 greater. 568 greater.
563 * You must load the correct ``.nexe`` file for your machine's specific 569 * You must load the correct ``.nexe`` file for your machine's specific
564 instruction set architecture (x86-32, x86-64 or ARM). You can ensure 570 instruction set architecture (x86-32, x86-64 or ARM). You can ensure
565 you're loading the correct ``.nexe`` file by building a separate 571 you're loading the correct ``.nexe`` file by building a separate
566 ``.nexe`` for each architecture, and using a ``.nmf`` manifest file to 572 ``.nexe`` for each architecture, and using a ``.nmf`` manifest file to
567 let the browser select the correct ``.nexe`` file. Note: the need to 573 let the browser select the correct ``.nexe`` file. Note: the need to
568 select a processor-specific ``.nexe`` goes away with Portable Native 574 select a processor-specific ``.nexe`` goes away with Portable Native
569 Client. 575 Client.
570 * If things still aren't working, :doc:`ask for help <help>`! 576 * If things still aren't working, :doc:`ask for help <help>`!
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698