49 | | 1. Change the GPU framework. |
50 | | Currently BOINC requires that all GPUs of a given vendor (NVIDIA, ATI, Intel) be similar, |
51 | | and it treats them as a single pool |
52 | | (i.e. jobs are not associated with a particular GPU instance). |
53 | | This model has a number of drawbacks on machines with multiple different GPUs. |
54 | | Change the model so that each GPU is treated separately. |
55 | | This will require major changes to the client, scheduler, and RPC protocol. |
56 | | 1. The client's job scheduler has several O(N^2) algorithms, |
57 | | where N is the number of jobs queued on the client. |
58 | | Change these to Nlog(N). |
59 | | 1. The scheduler's logic for selecting app versions is clumsy. |
60 | | Replace it with logic that, at the start, selects a version for each (app, resource type) |
61 | | and stores these in an array. |
| 55 | === Eliminate O(n!^2) algorithms === |
| 56 | The client's job scheduler has several O(N!^2) algorithms, |
| 57 | where N is the number of jobs queued on the client. |
| 58 | These cause the client to use lots of CPU when N is large (1,000). |
| 59 | Change these to Nlog(N). |
| 60 | |
| 61 | === Automated testing of BOINC === |
| 62 | |
| 63 | We plan to deploy a Jenkins-based automated test system for BOINC. |
| 64 | Help us add unit tests to the BOINC code, |
| 65 | and to design end-to-end tests that exercise the entire system |
| 66 | under a range of use cases and error conditions. |
| 67 | |
| 68 | === Accelerating batch completion === |
| 69 | |
| 70 | Volunteer computing resources are unreliable - computers fail, |
| 71 | people uninstall BOINC, and so on. |
| 72 | Roughly 5% of jobs fail or time out. |
| 73 | This means that in a batch of 10,000 jobs, 500 or so will fail. |
| 74 | We retry these (after a delay of a few days) and 25 or so will fail, and so on. |
| 75 | Thus is can take quite a long time to finish the entire batch. |
| 76 | |
| 77 | This problem can be solved by using more reliable computers to handle retries |
| 78 | and jobs at the end of a batch. |
| 79 | Doing so, however, is tricky. |
| 80 | Design and implement a mechanism for doing this. |
| 81 | |
| 82 | === Improve app version selection === |
| 83 | |
| 84 | The scheduler's logic for selecting app versions is clumsy. |
| 85 | Replace it with logic that, at the start of a request, selects a version for each (app, resource type) |
| 86 | and stores these in an array. |
| 87 | |
| 88 | == Small and medium-size project == |
| 89 | |
| 90 | === Enhance the BOINC Android GUI === |
| 91 | |
| 92 | The current BOINC Android GUI is functional but not visually appealing, |
| 93 | and it lacks some usability features. |
| 94 | Design and implement improvements to the GUI. |
| 95 | Possibilities includes: |
| 96 | |
| 97 | * Add graphics to the GUI; for example, allow projects to supply |
| 98 | slide-show images illustrating their science. |
| 99 | * Implement mechanism that allow users to smoothly navigate |
| 100 | from the GUI to web-based features on project sites, |
| 101 | as is done on the desktop BOINC GUI. |
| 102 | * Implement the "notices" mechanism that allows project to push |
| 103 | news items to volunteers. |