| 5 | | A '''platform''' is a compilation target - typically a combination of a CPU architecture and an operating system. The BOINC database of each project includes a set of platforms. Each platform has a '''name''' and a '''description''' of the range of computers it can handle. Each [AppVersion application version] is associated with a particular platform. |
| | 3 | A '''platform''' is a compilation target for BOINC applications - |
| | 4 | typically a combination of a CPU architecture and an operating system. |
| | 5 | Each [AppVersion application version] is associated with a particular platform. |
| | 6 | Your project can provide application versions for any set of platforms; |
| | 7 | the more platforms you support, the more hosts will be able to |
| | 8 | participate in your project. |
| 7 | | Most of the Unix platforms names are what's generated by config.guess. |
| 8 | | But not all of them. |
| 9 | | If config.guess generates the wrong string, |
| 10 | | use the [BuildSystem --with-boinc-platform=NAME option to configure]. |
| | 10 | A given BOINC client supports one or more platforms |
| | 11 | (e.g., a Win64 client can run Win64 or Win32 applications). |
| | 12 | The client reports its platform to the scheduling server, |
| | 13 | and the scheduling server sends work to the client only |
| | 14 | if there is an application version for one of its platforms. |
| 12 | | For coherence between projects, you should use only the following platforms. |
| | 16 | BOINC defines a set of platforms (see below). |
| | 17 | If you want your application to exploit specific architectural features at a finer granularity, |
| | 18 | your application must recognize the features and branch to appropriate code. |
| | 19 | In other words, if you want to make a version of your application that can use the AMD 3DNow instruction set, |
| | 20 | don't create a new '''windows_amd_3dnow''' platform. |
| | 21 | Instead, make a version for the '''windows_intelx86''' platform that recognizes when it's running on a 3DNow machine, |
| | 22 | and branches to the appropriate code. |
| | 23 | |
| | 24 | Platforms are maintained in the '''platform''' table in the BOINC database. |
| | 25 | This is pre-populated with the 10 or so most common platforms. |
| | 26 | To create more, edit '''project.xml''' and add them using [XaddTool xadd]. |
| | 27 | |
| | 28 | Each platform has a '''name''' and a '''description''' of the range of computers it can handle. |
| | 29 | For coherence between projects, use only the following platforms. |
| 44 | | Since version 5.9.6, the BOINC client supports alternate platforms. For example, a Mac/Intel host is able to run Mac/PPC applications in emulation mode. Mac/Intel clients will ask for work specifying Mac/Intel as main platform and Mac/PPC as alternate platform. If your project doesn't have a Mac/Intel application, such hosts will still be able to participate in your project, using the PPC application. |
| 45 | | |
| 46 | | == Application optimization for specific architectures == #optimization |
| 47 | | |
| 48 | | BOINC allows applications to exploit specific architectures, but places the burden of recognizing the architecture on the application. In other words, if you want to make a version of your application that can use the AMD 3DNow instruction set, don't create a new '''windows_amd_3dnow''' platform. Instead, make a version for the '''windows_intelx86''' platform that recognizes when it's running on a 3DNow machine, and branches to the appropriate code. |
| 49 | | |
| 50 | | This excludes the combinatorial explosion of versions and architectures from the internals of BOINC. |
| 51 | | |
| 52 | | == Web-site statistics breakdown by architecture == #arch-stats |
| 53 | | |
| 54 | | BOINC collects architecture details about each completed result to allow detailed statistical breakdowns. |
| 55 | | |
| 56 | | First, the core client attempts to find the CPU vendor, the CPU model, the OS name, and the OS version. These are stored in the host record. |
| 57 | | |
| 58 | | Second, applications that recognize even more specific architecture information can pass it back to the core client using the '''boinc_architecture()''' function from [BasicApi the BOINC API]. This passes a string (project-specific, but typically in XML) to the core client, which records it in the '''architecture_xml''' field of the '''result''' database record. For example, the application might pass a description like |
| 59 | | |
| 60 | | {{{ |
| 61 | | <has_3dnow_instructions/> |
| 62 | | <graphics_board>ATI Rage 64MB</graphics_board> |
| 63 | | }}} |
| 64 | | |
| 65 | | This makes it possible, for example, to report average or total performance statistics for 3DNow hosts contrasted with other Intel-compatible hosts. |
| 66 | | |
| 67 | | == Tools == #tools |
| 68 | | |
| 69 | | Platforms are maintained in the '''platform''' table in the BOINC DB, and can be created using the [XaddTool xadd] utility. |