On Wed, Nov 25, 2020 at 12:21:44AM +0900, Akira Yokosawa wrote: > On Tue, 24 Nov 2020 07:29:58 +0900, Akira Yokosawa wrote: > > On Mon, 23 Nov 2020 13:15:42 -0800, Paul E. McKenney wrote: > >> On Mon, Nov 23, 2020 at 12:14:05AM +0900, Akira Yokosawa wrote: > >>> Hi Paul, > >>> > >>> So this *not-pull* request is to show you my WIP branch to add indices > >>> to perfbook. > >>> > >>> Patch 1/7 kicks of the changes by adding index annotations in Glossary. > >>> > >>> Patch 2/7 reorganizes back matter of perfbook. Glossary, Bibliography, > >>> Credits, and the newly added Index belong there. > >>> I employed "tocbibind" package to include Bibliography in TOC. > >>> > >>> Patch 3/7 adds API Index. Annotations for the Index is mostly done in > >>> toolsoftrade. > >>> You can see that raw \index or \sindex macros are avoided in .tex source > >>> files. Using custom macros for annotation can reduce diffs in adding > >>> annotations. > >>> glossary.tex is an exception, as every description item has > >>> \index{} on it. If we add other annotations there, we need to use > >>> custom macros. > >>> > >>> Patch 4/7 adds annotations for people's names. They could be in another > >>> independent index, but they are merged into the general index. > >>> As a result, the ratio of people's names in the index is quite high at the > >>> moment. > >>> It will decrease as we add annotations for general terms/words. > >>> Names are presented in the index in the form of "surname, forename" order. > >>> To enable this, annotation is done by \ppl{forename}{surname}. > >>> When you need only surname in the text, use \pplsur macro instead. > >>> For names with abbreviated middle name, there is a \pplmdl command as > >>> well. > >>> > >>> Patch 5/7 highlights indexed words/terms/names in the text. > >>> This should help us in finding out what needs to be annotated. > >>> If the color of DarkGreen is problematic for you, please let me know > >>> which color is easy for you. > >>> One of the purpose of avoiding raw \index{} macros for annotation is > >>> to realize this coloring. > >>> > >>> Patch 6/7 adds a few more annotations of people's names in "formal". > >>> > >>> Patch 7/7 changes the layout of index from default 2 columns to 3 columns. > >>> As mentioned in the change log, API Index shows a minor glitches of > >>> extraneous line folding caused by the side effect of \co{} macro. > >>> This issue has been fixed in the most recent LaTeX released on 2020-10-01. > >>> I have not figured out if there is some workaround for older LaTeX. > >> > >> Nice start! > >> > >> This is in the "lt" flavor only, correct? > > > > Oh, why did I miss the most important to share? > > I added a new target "ix" and its derivative "1cix" in patch 1/7. > > These make targets enable coloring of indexed words/names/APIs added in > > patch 5/7. I'm not sure the color choice works with your eyes, though. > > > >> The default "make" generates > >> the perfbook.ind file, but does not include it. But "make lt" doesn't > >> either. Trying again setting the "toindex" boolean to "true", which does > >> in fact generate a pair of three-column indexes at the end, very good! > >> > >>> The appearance of index pages does not matter so much at the moment, > >>> I suppose. We need to add annotations first. > >> > >> Agreed, the annotations will be a big job. I have a small patch > >> at the end for minor typos as well. > > > > I thought I made quite a few typos. Thanks for catching them. > > I'll merge it to patch 1/7. > > > >> > >>> To do that, we need to agree the organization of index pages. > >>> Current indices are flat. > >>> LaTeX indexing framework supports up to 3 levels of hierarchy. > >>> > >>> For example: > >>> > >>> Flat index > >>> > >>> Critical section, <page> > >>> ... > >>> Read-side critical section, <page> > >>> ... > >>> Write-side critical section, <page> > >>> > >>> 2 level index > >>> > >>> Critical section, <page> > >>> read-side, <page> > >>> write-size, <page> > >>> ... > >>> Read-side critical section, see Critical section, read-side > >>> ... > >>> Write-side critical section, see Critical section, write-side > >>> > >>> Which do you prefer? > >> > >> I have a minor preference for the 2-level index. However, it might or > >> might not be worth it. For example, should "Associativity" be on its own, > >> or under "Cache"? Or in both places? > > > > We will need some experiments. > > Let me play with terms in glossary.tex. > > > >> > >>> Another point on people's names. > >>> I'm *not* thinking of making index of authors of Bibliography. > >>> Due to the amount of cited material, it will require a ton of cleanups > >>> in .bib files if you want the author index to look consistent. > >>> > >>> Which means, you need to mention names of authors who you want to see > >>> in the index. Does this sound reasonable to you? > >> > >> That makes a lot of sense! > > > > OK. > > > >> > >>> I know you are debugging/analyzing/testing RCU and lockdep interaction > >>> right now. > >> > >> But sometimes one must take a break. And I am hoping to make more > >> progress on updating the last few graphs this week. It turns out that > >> there are interesting interactions between userspace RCU's call_rcu() > >> worker threads and jemalloc(), for example. The surprise, especially to > >> the jemalloc() folks is that jemalloc() doesn't help much, even if the > >> call_rcu() worker threads to a throw-away allocation to help jemalloc() > >> realize that it must create caches for those worker threads. > >> > >> It is possible that this is a consequence of the fact that the bottleneck > >> for large RCU-protected hash tables is in the L3 cache rather than in > >> any particular CPU. Which is an unexpected benefit, as this situation > >> clearly calls attention to the possibility of this type of bottleneck. > >> > >> Not so good for second-edition schedule, though! > > > > ;-) ;-) > > > >> > >>> I'm not in a hurry and looking forward to your feedback. > >> > >> I am going to list a few additional index entries: CPU, memory, I/O, > >> multicore, synchronization, cache hit, Moore's Law free lunch, speed of > >> light, 3D integration, accelerators, CAS, socket, core, thread (hardware > >> and software), simultaneous multithreading, hyperthreading, interconnect, > >> interrupt (expansion of IRQ?), inter-processor interrupt (expansion of > >> IPI?), locality of reference (spatial and temporal), cache prefetching, > >> cache alignment, cache ways, read-mostly replication, partitioning, > >> out-of-order execution, super-scalar CPU, hardware transactional memory, > >> software transactional memory, hazard pointers, reference counters, > >> lockless, the various counter algorithms, object oriented, object oriented > >> spaghetti code, stall (for example, pipeline stall due to a cache miss), > >> double-ended queue, maze (or maze solving), branch prediction, atomic > >> instructions, atomic read-modify-write instructions, memory barrier, > >> distributed-system parallelism (as opposed to shared-memory parallelism), > >> communications miss (of caches), herd (the LKMM tool), coherence order, > >> reads-from, from-reads, Nidhugg, Promela (and spin?), Linux kernel, > >> and much more, but that is enough for now. > > > > If you want to do it on your own, why not merge the next pull request > > which will address textwidth of 1c-layout index pages? > > > > It should be safe as indexing is not enabled in existing make targets. > > So please find v2 of the pull request bellow. > > It has typo fixes applied in patch 1/7 (now 1/11). > Additional 4 patches addresses the width of 1c layout index pages. > In doing so, I removed all of those margin settings by magic numbers. > > Patch 8/11 fixes the 1c geometry settings for index pages. > Patch 9/11 removes remaining magical margin settings. > Patch 10/11 removes sed patterns substituting options to the \documentclass{} > command at the top of perfbook-lt.tex. The geometry package overrides > these options afterwords in the preamble. > Patch 11/11 adds new make targets in synctex-forward.sh to accept "ix" and > "1cix" targets. I have pulled these in and pushed them under branch akiyks.2020.11.24a, thank you! However, given that they do not seem to affect the old make targets, I am not seeing much reason not to merge them into the master branch. Any reasons not to? Thanx, Paul > Thanks, Akira > > -- > The following changes since commit 810da77e1c66ad543e34a10b197aa9e629c7dc8f: > > CodeSamples/formal: Use '{}' for empty init blocks in litmus tests (2020-11-15 12:38:36 -0800) > > are available in the Git repository at: > > https://github.com/akiyks/perfbook.git tags/for-paul-2020.11.24a > > for you to fetch changes up to d4acd14416f6a96591cd5cf6733155064acee44b: > > synctex-forward: Add new targets in target list (2020-11-24 23:48:31 +0900) > > ---------------------------------------------------------------- > Akira Yokosawa (11): > PoC of indexing > Reorganize backmatters > PoC of additional API Index > index: Add annotations to people's names for PoC > Color indexed text conditionally > index: Add some more people index annotations in 'formal' > index: Trial of 3 column > Use wider layout for Index in 1c build > Delegate geometry settings to 'geometry' package > Makefile: Remove sed patterns to substitute paper and column setting > synctex-forward: Add new targets in target list > > .gitignore | 3 + > Makefile | 15 +- > SMPdesign/SMPdesign.tex | 2 +- > SMPdesign/partexercises.tex | 5 +- > appendix/ack/ack.tex => ack.tex | 6 +- > appendix/appendix.tex | 20 -- > count/count.tex | 2 +- > cpu/cpu.tex | 3 +- > cpu/hwfreelunch.tex | 6 +- > cpu/overview.tex | 4 +- > datastruct/datastruct.tex | 4 +- > debugging/debugging.tex | 5 +- > defer/rcurelated.tex | 92 +++++---- > defer/rcuusage.tex | 3 +- > formal/axiomatic.tex | 4 +- > formal/ppcmem.tex | 7 +- > formal/spinhint.tex | 2 +- > future/cpu.tex | 12 +- > future/tm.tex | 2 +- > glossary.tex | 112 +++++------ > howto/howto.tex | 37 ++-- > intro/intro.tex | 8 +- > memorder/memorder.tex | 6 +- > perfbook-lt.tex | 143 ++++++++++---- > toolsoftrade/toolsoftrade.tex | 420 ++++++++++++++++++++-------------------- > utilities/runlatex.sh | 2 + > utilities/synctex-forward.sh | 6 +- > 27 files changed, 510 insertions(+), 421 deletions(-) > rename appendix/ack/ack.tex => ack.tex (98%) > -- > > > > >> > >> Should the index expand acronyms? Hennessy and Patterson do for some > >> acronyms but not others, so we can justify being inconsistent if we > >> would like. > > > > I guess index entries will keep somewhat inconsistent in any way. > > Keeping them consistent will require huge effort. > > > >> > >> You might argue that some of these need glossary entries, and you > >> would be quite right. ;-) > > > > ;-) > > > >> > >> In other news, I am considering bringing back the quantum-computing > >> section given that things seem to have stabilized a bit. But it is > >> still a bit off-topic. > >> > >> Again, great start on the index! > > > > Glad to know you liked it! > > > > Thanks, Akira > > > >> > >> Thanx, Paul > >> > >>> Thanks, Akira > >>> > >>> -- > >>> The following changes since commit 810da77e1c66ad543e34a10b197aa9e629c7dc8f: > >>> > >>> CodeSamples/formal: Use '{}' for empty init blocks in litmus tests (2020-11-15 12:38:36 -0800) > >>> > >>> are available in the Git repository at: > >>> > >>> https://github.com/akiyks/perfbook.git tags/for-paul-not-pull-2020.11.23a > >>> > >>> for you to fetch changes up to 9cecce4c32c9ff97f3330591d0699c8aa7e2585b: > >>> > >>> index: Trial of 3 column (2020-11-22 23:16:58 +0900) > >>> > >>> ---------------------------------------------------------------- > >>> Akira Yokosawa (7): > >>> PoC of indexing > >>> Reorganize backmatters > >>> PoC of additional API Index > >>> index: Add annotations to people's names for PoC > >>> Color indexed text conditionally > >>> index: Add some more people index annotations in 'formal' > >>> index: Trial of 3 column > >>> > >>> .gitignore | 3 + > >>> Makefile | 10 +- > >>> SMPdesign/SMPdesign.tex | 2 +- > >>> SMPdesign/partexercises.tex | 5 +- > >>> appendix/ack/ack.tex => ack.tex | 6 +- > >>> appendix/appendix.tex | 20 -- > >>> count/count.tex | 2 +- > >>> cpu/cpu.tex | 3 +- > >>> cpu/hwfreelunch.tex | 6 +- > >>> cpu/overview.tex | 4 +- > >>> datastruct/datastruct.tex | 4 +- > >>> debugging/debugging.tex | 5 +- > >>> defer/rcurelated.tex | 92 +++++---- > >>> defer/rcuusage.tex | 3 +- > >>> formal/axiomatic.tex | 4 +- > >>> formal/ppcmem.tex | 7 +- > >>> formal/spinhint.tex | 2 +- > >>> future/cpu.tex | 12 +- > >>> future/tm.tex | 2 +- > >>> glossary.tex | 112 +++++------ > >>> howto/howto.tex | 37 ++-- > >>> intro/intro.tex | 8 +- > >>> memorder/memorder.tex | 6 +- > >>> perfbook-lt.tex | 75 ++++++- > >>> toolsoftrade/toolsoftrade.tex | 420 ++++++++++++++++++++-------------------- > >>> utilities/runlatex.sh | 2 + > >>> 26 files changed, 470 insertions(+), 382 deletions(-) > >>> rename appendix/ack/ack.tex => ack.tex (98%) > > >