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. |