Re: [PATCH] memorder: Transpose table 'Summary of Memory Ordering'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 13, 2017 at 12:40:03AM +0900, Akira Yokosawa wrote:
> >From e74f9eb7cdc5cd21ca4cbc33dcd57d210585d492 Mon Sep 17 00:00:00 2001
> From: Akira Yokosawa <akiyks@xxxxxxxxx>
> Date: Wed, 13 Sep 2017 00:16:54 +0900
> Subject: [PATCH] memorder: Transpose table 'Summary of Memory Ordering'
> 
> Signed-off-by: Akira Yokosawa <akiyks@xxxxxxxxx>

It does look quite a bit better, so I pulled it in, thank you!

I also pulled in your later patch fixing a number of typos, good eyes!

							Thanx, Paul

> ---
> Hi Paul,
> 
> Now that this table gets wide, isn't it a good idea to transpose the table?
> Then the tall heading of questions can be placed horizontally and should be
> easier to read.
> 
> This patch is my attempt to do so.
> 
> You might want to keep CPU families in rows, so I'm not pushing the
> conversion.
> 
> Transposed one is easier to be converted with booktabs' rules and
> alternately colored rows, I suppose.
> 
> Thoughts?
> 
>       Thanks, Akira 
> --
>  memorder/memorder.tex | 145 +++++++++++++++++++++++++++-----------------------
>  1 file changed, 78 insertions(+), 67 deletions(-)
> 
> diff --git a/memorder/memorder.tex b/memorder/memorder.tex
> index ac03c23..0a3ab28 100644
> --- a/memorder/memorder.tex
> +++ b/memorder/memorder.tex
> @@ -3702,78 +3702,89 @@ dependencies.
>  \begin{table*}
>  \small
>  \centering
> -\begin{tabular}{l|c|c|c|c|c|c|c|c|c|c||c|c|c}
> -	~ & \multicolumn{10}{c||}{Memory Ordering} &
> -		\multicolumn{3}{c}{Instructions} \\
> -	\cline{2-14}
> -	~ ~ ~ ~ ~ ~ ~ ~ ~
> -	& \begin{picture}(6,200)(0,0)
> -		\rotatebox{90}{Loads Reordered After Loads or Stores?}
> +\renewcommand*{\arraystretch}{1.2}
> +\begin{tabular}{l|p{2in}|c|c|c|c|c|c|c|c|c|c|c}
> +	\multicolumn{2}{l|}{~}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{Alpha}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Stores Reordered After Stores?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{ARMv8}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Stores Reordered After Loads?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{ARMv7-A/R}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Atomic Instructions Reordered With Loads or Stores?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{Itanium}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Dependent Loads Reordered?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{MIPS}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Dependent Stores Reordered?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{(PA-RISC)}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Non-Sequentially Consistent?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{PA-RISC CPUs}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Non-Multicopy Atomic?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{POWER}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Non-Other-Multicopy Atomic?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{SPARC TSO}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Non-Cache Coherent?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{x86}
>  	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Load-Acquire/Store-Release?}
> -	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Atomic RMW Instruction Type?}
> -	  \end{picture}
> -	& \begin{picture}(6,185)(0,0)
> -		\rotatebox{90}{Incoherent Instruction Cache/Pipeline?}
> +	& \begin{picture}(6,60)(0,0)
> +		\rotatebox{90}{z~Systems}
>  	  \end{picture}
>  	\\
>  	\hline
> -%			 R_  WW  WR  A_    DR  DW NSC  NM NOM NCC  LA RMW  IC
> -	\hline
> -	Alpha		& Y & Y & Y & Y   & Y & ~ & Y & Y & Y & ~ & F & L & Y \\
> -	\hline
> -	ARMv8		& Y & Y & Y & Y   & ~ & ~ & Y & Y & ~ & ~ & i & L & Y \\
> -	\hline
> -	ARMv7-A/R	& Y & Y & Y & Y   & ~ & ~ & Y & Y & Y & ~ & F & L & Y \\
> -	\hline
> -	Itanium		& Y & Y & Y & ~   & ~ & ~ & Y & Y & Y & Y & I & C & Y \\
> -	\hline
> -	MIPS		& Y & Y & Y & Y   & ~ & ~ & Y & Y & Y & ~ & ? & L & Y \\
> -	\hline
> -	(PA-RISC)	& Y & Y & Y & ~   & ~ & ~ & ~ & Y & ~ & ~ & ? & ? & ~ \\
> -	\hline
> -	PA-RISC CPUs	& ~ & ~ & ~ & ~   & ~ & ~ & Y & ~ & ~ & ~ & ~ & ? & ~ \\
> -	\hline
> -	POWER\textsuperscript{\texttrademark}
> -			& Y & Y & Y & Y   & ~ & ~ & Y & Y & Y & ~ & b & L & Y \\
> -	\hline
> -	SPARC TSO	& ~ & ~ & Y & ~   & ~ & ~ & Y & Y & ~ & ~ & ~ & ? & Y \\
> +%		 Alpha ARMv8 ARMv7 Itanium MIPS PA-RISC -CPUs PPC SPARC x86 z Systems
>  	\hline
> -	x86		& ~ & ~ & Y & ~   & ~ & ~ & Y & Y & ~ & ~ & ~ & C & Y \\
> +        Memory Ordering
> +	& Loads Reordered After Loads or Stores?
> +		 & Y   & Y   & Y   & Y     & Y  & Y     & ~   & Y & ~   & ~ & ~ \\
> +	\cline{2-13}
> +	& Stores Reordered After Stores?
> +		 & Y   & Y   & Y   & Y     & Y  & Y     & ~   & Y & ~   & ~ & ~ \\
> +	\cline{2-13}
> +	& Stores Reordered After Loads?
> +		 & Y   & Y   & Y   & Y     & Y  & Y     & ~   & Y & Y   & Y & Y \\
> +	\cline{2-13}
> +	& Atomic Instructions Reordered With Loads or Stores?
> +		 & Y   & Y   & Y   & ~     & Y  & ~     & ~   & Y & ~   & ~ & ~ \\
> +	\cline{2-13}
> +	& Dependent Loads Reordered?
> +		 & Y   & ~   & ~   & ~     & ~  & ~     & ~   & ~ & ~   & ~ & ~ \\
> +	\cline{2-13}
> +	& Dependent Stores Reordered?
> +		 & ~   & ~   & ~   & ~     & ~  & ~     & ~   & ~ & ~   & ~ & ~ \\
> +	\cline{2-13}
> +	& Non-Sequencially Consistent?
> +		 & Y   & Y   & Y   & Y     & Y  & ~     & Y   & Y & Y   & Y & Y \\
> +	\cline{2-13}
> +	& Non-Multicopy Atomic?
> +		 & Y   & Y   & Y   & Y     & Y  & Y     & ~   & Y & Y   & Y & ~ \\
> +	\cline{2-13}
> +	& Non-Other-Multicopy Atomic?
> +		 & Y   & ~   & Y   & Y     & Y  & Y     & ~   & Y & Y   & Y & ~ \\
> +	\cline{2-13}
> +	& Non-Cache Coherent?
> +		 & ~   & ~   & ~   & Y     & ~  & ~     & ~   & ~ & ~   & ~ & ~ \\
>  	\hline
> -	z~Systems\textsuperscript{\textregistered}
> -			& ~ & ~ & Y & ~   & ~ & ~ & Y & ~ & ~ & ~ & ~ & C & Y \\
> +        \hline
> +        Instructions
> +	& Load-Acquire/Store-Release?
> +		 & F   & i   & F   & I     & ?  & ?     & ~   & b & ~   & ~ & ~ \\
> +        \cline{2-13}
> +	& Atomic RMW Instruction Type?
> +		 & L   & L   & L   & C     & L  & ?     & ?   & L & ?   & C & C \\
> +        \cline{2-13}
> +	& Incoherent Instruction Cache/Pipeline?
> +		 & Y   & Y   & Y   & Y     & Y  & ~     & ~   & Y & Y   & Y & Y \\
>  \end{tabular}
> +\renewcommand*{\arraystretch}{1}
>  \begin{tabular}{llcl}
>  	~ & ~ & ~ & ~\\
>  	{ \bf Key: } & ~ & ~ & ~ \\
> @@ -3803,19 +3814,19 @@ For full details, see the reference manual for the CPU of interest.
> 
>  Getting back to
>  Table~\ref{tab:memorder:Summary of Memory Ordering},
> -the the first group of columns look at memory-ordering
> +the first group of rows look at memory-ordering
>  properties and the second group looks at instruction properties.
> 
> -The first three columns indicate whether a given CPU allows the four
> +The first three rows indicate whether a given CPU allows the four
>  possible combinations of loads and stores to be reordered, as discussed
>  in
>  Sections~\ref{sec:memorder:Ordering: Why and How?} and
>  \ref{sec:memorder:Load Followed By Load}--\ref{sec:memorder:Store Followed By Store}.
> -The next column (``Atomic Instructions Reordered With Loads or Stores?'')
> +The next row (``Atomic Instructions Reordered With Loads or Stores?'')
>  indicates whether a given CPU allows loads and stores
>  to be reordered with atomic instructions.
> 
> -The fifth and sixth columns cover reordering and dependencies,
> +The fifth and sixth rows cover reordering and dependencies,
>  which was covered in
>  Sections~\ref{sec:memorder:Address Dependencies}--\ref{sec:memorder:Control Dependencies}
>  and which is explained in more detail in
> @@ -3823,24 +3834,24 @@ Section~\ref{sec:memorder:Alpha}.
>  The short version is that Alpha requires memory barriers for readers
>  as well as updaters of linked data structures.
> 
> -The next column, ``Non-Sequentially Consistent'', indicates whether
> +The next row, ``Non-Sequentially Consistent'', indicates whether
>  the CPU's normal load and store instructions are constrained by
>  sequential consistency.
>  Almost all are not constrained in this way for performance reasons.
> 
> -The next two columns cover multicopy atomicity, which was defined in
> +The next two rows cover multicopy atomicity, which was defined in
>  Section~\ref{sec:memorder:Multicopy Atomicity}.
>  The first is full-up (and rare) multicopy atomicity, and the second is the
>  weaker other-multicopy atomicity.
> 
> -The next column, ``Non-Cache Coherent'', covers accesses from multiple
> +The next row, ``Non-Cache Coherent'', covers accesses from multiple
>  threads to a single variable, which was discussed in
>  Section~\ref{sec:memorder:Cache Coherence}.
> 
> -The final three columns cover instruction-level choices and issues.
> -The first column indicates how each CPU implements load-acquire
> -and store-release, the second column classifies CPUs by atomic-instruction
> -type, and the third and final column
> +The final three rows cover instruction-level choices and issues.
> +The first row indicates how each CPU implements load-acquire
> +and store-release, the second row classifies CPUs by atomic-instruction
> +type, and the third and final row
>  indicates whether a given CPU has an incoherent
>  instruction cache and pipeline.
>  Such CPUs require special instructions be executed for self-modifying
> -- 
> 2.7.4
> 

--
To unsubscribe from this list: send the line "unsubscribe perfbook" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux