Changes between Version 2 and Version 3 of SoC2015


Ignore:
Timestamp:
Dec 21, 2014, 8:39:23 PM (8 years ago)
Author:
Niall Douglas
Comment:

Added concurrent unordered map detail

Legend:

Unmodified
Added
Removed
Modified
  • SoC2015

    v2 v3  
    77=== Changes in process for both mentors and students over preceding years ===
    88
    9 This year, 2015, is going to be slightly different from preceding years of how Boost has operated GSoC. The first new change was that last year we trialled extending the really superb GSoC 2014 projects by an additional three month period funded by Boost, and in 2014 the project we selected for extension was [https://ldionne.github.io/hana/ proposed Boost.Hana] by student Louis Dionne mentored by Joel Falcou. If these extensions prove successful, we may continue to extend the really outstanding GSoC projects from 2015. Note that the Boost Steering Committee can only consider extensions where the mentor is more than happy to continue mentoring the project in an extension, and where the GSoC administrators and the other GSoC mentors and Boost Steering Committee members all unanimously agree on the merit of the extension. To reach such a standard is exceptionally hard, and students interested may wish to review [https://github.com/ldionne/hana Hana's source code] to see what is demanded for a GSoC extension.
     9This year, 2015, is going to be slightly different from preceding years of how Boost has operated GSoC. The first new change was that last year we trialled extending the really superb GSoC 2014 projects by an additional three month period funded by Boost, and in 2014 the project we selected for extension was [https://ldionne.github.io/hana/ proposed Boost.Hana] by student Louis Dionne mentored by Joel Falcou. If these extensions prove successful, we may continue to extend the really outstanding GSoC projects in 2015. Note that the Boost Steering Committee can only consider extensions where the mentor is more than happy to continue mentoring the project in an extension, and where the GSoC administrators and the other GSoC mentors and Boost Steering Committee members all unanimously agree on the merit of the extension. To reach such a standard is exceptionally hard, and students interested may wish to review [https://github.com/ldionne/hana Hana's source code] to see what is demanded for a Boost funded GSoC extension.
    1010
    1111The second new change is in how projects will be ranked by the community. Up until now, the community ranked student proposals by awarding a score, and we recommended to Google to select all those proposals which matched a single mentor to a single student based on the top of the score ranking. Unfortunately, this process has led to some disappointments for both student and mentor especially where the student was far better at writing proposals than writing code, and we also worry that the old system discriminates against non-native English speakers. As of this year, we therefore request a new part to student proposal ideas, that being of an exam or test the students interested in that proposal can take to demonstrate their programming capability. In 2015, student proposals with accompanying ability test scores for that candidate '''will be preferentially ranked above proposals without test scores'''.
    1212
    13 This runs the risk of excluding student proposals not suggested by this ideas page - in fact, Louis Dionne's Hana was not suggested here, it came entirely from Louis. We therefore add a second way of getting preferentially ranked: candidates who have written existing C++ libraries of at least 5,000 - 10,000 lines of code and who propose their own project, AND have prearranged a mentor through [http://www.boost.org/community/groups.html#main the Boost developer's mailing list], will also be preferentially ranked.
     13This runs the risk of excluding student proposals not suggested by this ideas page - in fact, Louis Dionne's Hana was not suggested here, it came entirely from Louis. We therefore add a second way of getting preferentially ranked: candidates who have written existing C++ libraries of at least 1,000 lines of code (excluding comments and whitespace) and who propose their own project, AND have prearranged a mentor through [http://www.boost.org/community/groups.html#main the Boost developer's mailing list], will also be preferentially ranked.
    1414
    1515The scoring by the community will work as before, but preferentially ranked candidates and proposals will be entirely consumed before unpreferentially ranked candidates and proposals, even if the candidate's exam results were poor (though note that in this case no mentor may wish to mentor such a student, and we shall have to exclude such a candidate as a result).
    1616
    17 To help community members write a student proposal idea matching the new format, please see the concurrent_unordered_map proposal.
     17''To help mentors write a student proposal idea matching the newly requested format, please see the "Concurrent hash tables" proposal as a template.''
    1818
    1919== Requirements ==
     
    3232* This year's GSoC will be housed at https://github.com/BoostGSoC15
    3333
    34 = Suggested prewritten GSoC project proposals =
     34Students may find examining past GSoC source code and commit histories of use.
     35
     36= Suggested precanned GSoC project proposals =
    3537
    3638== Self-contained standalone GSoC Projects with programming competency test ==
    37 The following projects and programming competency test have been suggested by potential mentors. If the descriptions of these projects seem a little vague... Well, that's intentional. We are looking for students to develop requirements for their proposals by doing initial background research on the topic, and interacting with the community on the mailing list to help identify expectations.
     39The following projects and programming competency test have been suggested by potential mentors. Selecting one of these, in consultation with the [http://www.boost.org/community/groups.html#main Boost developers mailing list], provides the highest chance that a mentor can be found for your GSoC project proposal and that your proposal will be preferentially ranked (see above).
    3840
    39 === Concurrent hash tables (concurrent_unordered_map) ===
     41=== 1. Concurrent hash tables (boost::concurrent_unordered_[multi]set|[multi]map) ===
     42Potential mentors: Niall Douglas
    4043
     44==== Background ====
     45Strangely enough, Boost does not provide an implementation of thread safe concurrent associative sets and maps despite that the unordered implementation from Intel's Thread Building Blocks and Microsoft's Parallel Patterns Library was proposed for standardisation in [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3425.html N3425 Concurrent Unordered Associative Containers for C++]. This is probably because that implementation (the split ordered list algorithm by Shalev and Shavit, 2006) had the serious shortcoming of not being thread safe for some operations, most importantly item deletion, and the workarounds proposed by N3425 did not appeal. Moreover, [https://www.usenix.org/legacy/event/atc11/tech/final_files/Triplett.pdf there are other concurrent hash table algorithms which do not have such shortcomings].
     46
     47It is long overdue for Boost to gain a thread safe concurrent associative containers implementation, and to that end you will find a [https://github.com/ned14/boost.spinlock/blob/master/include/boost/spinlock/concurrent_unordered_map.hpp concurrent_unordered_map prototype here] with [https://ci.nedprod.com/view/Boost%20Thread-Expected-Permit/job/Boost.Spinlock%20Test%20Linux%20GCC%204.8/doxygen/classboost_1_1spinlock_1_1concurrent__unordered__map.html its doxygen documentation here]. This particular design provides a complete STL compliant interface with every operation being thread safe and most operations permitting concurrency, but sacrifices the constant time performance of empty() and size() to achieve this. Moreover, its find() is only completely wait free if compiled with a transactional memory compiler.
     48
     49==== GSoC project proposal ====
     501. To refactor the implementation of the concurrent_unordered_map prototype into a generic, reusable layer from which the following containers can be implemented:
     51  a. boost::concurrent_unordered_set
     52  b. boost::concurrent_unordered_multiset
     53  c. boost::concurrent_unordered_map
     54  d. boost::concurrent_unordered_multimap
     55
     562. To complete the following missing functionality:
     57  a. Const iterators
     58  b. Const member functions
     59  c. Local iterators
     60  d. Copy and move construction plus copy and move assignment
     61  e. Better transactional memory C++ compiler support.
     62
     633. To write unit, functional and performance regression testing for all of the above, including exception safety testing and multi threaded testing, to a 100% code coverage level.
     64
     654. To write documentation to Boost quality levels for the new container classes, including time and space complexity guarantees and exception guarantees for each API and each use of each API.
     66
     67==== Potential project extension funded by Boost ====
     68To implement ordered and/or nearly-ordered concurrent associative containers in addition to unordered ones.
     69
     70==== Programming competency test ====
     71Implement item 2d (copy and move construction and copy and move assignment) for the concurrent_unordered_map prototype, and more importantly '''complete and thorough''' unit and functional and performance testing for the new functionality ([https://github.com/ned14/boost.spinlock/blob/master/test/unittests.cpp add the tests to this file]). You will find studying the rehash() implementation ought to make the implementation of this easy, but the true test of your competency will be in how well you design and write the testing for the new functionality.
     72
     73Submission of the programming test should be via copying and pasting the parts you wrote into the end of the proposal you submit to Google Melange. Do NOT copy and paste the entire class or whole files!
    4174
    4275== Self-contained standalone GSoC Projects (no competency test) ==
     76The following projects have been suggested by potential mentors. Selecting one of these, in consultation with the [http://www.boost.org/community/groups.html#main Boost developers mailing list], provides the highest chance that a mentor can be found for your GSoC project proposal. You should only choose one of these proposals if you already have at least 1,000 lines of C++ library code out there we can examine for your programming competency, otherwise your proposal cannot be preferentially ranked (see above). Make SURE you provide a link to your existing C++ code base in the proposal you submit to Melange.
    4377
     78(Insert proposals here)
    4479
    4580= Ideas =
     
    5186=== How to propose a mix of the below work items on the Boost mailing list ===
    5287
    53 Please do not simply arrive on the list and ask "I want to do GSoC Idea item no X because I don't want to do one of the predesigned GSoC projects on the list. Give me a mentor." as you will likely be ignored as a probable time waster. If you are to propose your own GSoC project, '''it must be of equivalent quality to the precanned GSoC project proposals written by mentors''' already on the ideas page, and by "equivalent", we really do mean '''equivalent''' i.e. very high. This is why mentors take the time to write project proposals for you, because for mentors who are domain experts in their field it is easier to write a high quality GSoC proposal likely to pass peer review and Google's own proposal review than for students who are not domain experts. If you are still really sure you want to invest the very considerable work to propose your own project, do the following before writing to the Boost mailing list with your own proposal:
     88Please do not simply arrive on the list and ask "I want to do (insert some random project idea here) because I don't want to do one of the predesigned GSoC projects on the list. Give me a mentor." as you will likely be ignored as a probable time waster. If you are to propose your own GSoC project, '''it must be of equivalent quality to the precanned GSoC project proposals written by mentors''' already on the ideas page, and by "equivalent", we really do mean '''equivalent''' i.e. very high, and probably including a programming competency test of your own design. This is why mentors take the time to write project proposals for you, because for mentors who are domain experts in their field it is easier to write a high quality GSoC proposal likely to pass peer review and Google's own proposal review than for students who are not domain experts. If you are still really sure you want to invest the very considerable work to propose your own project, do the following before writing to the Boost mailing list with your own proposal:
    5489
    55901. Research prior art i.e. provide proof in your approach email that you have researched alternative implementations in C++ and other languages of your project proposal. A list of pros and cons of those alternative implementations would be useful and show you really did study the problem.
     
    131166== Hardware ==
    132167* CPUID
    133