* [PATCH] formal, memorder: Fix typo and spacing
@ 2017-11-03 15:03 Akira Yokosawa
2017-11-03 15:53 ` Paul E. McKenney
0 siblings, 1 reply; 2+ messages in thread
From: Akira Yokosawa @ 2017-11-03 15:03 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: perfbook, Akira Yokosawa
From 6c10afe8a85c716b09038ee210530ef6005fc28e Mon Sep 17 00:00:00 2001
From: Akira Yokosawa <akiyks@gmail.com>
Date: Fri, 3 Nov 2017 23:54:07 +0900
Subject: [PATCH] formal, memorder: Fix typo and adjust spacing
Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
---
NOTE: Addition of "%" in the Answer to Quick Quiz is to avoid any white
spaces to be recognized by TeX engine before the first sentence of the
answer.
formal/formal.tex | 2 +-
formal/regression.tex | 6 +++---
memorder/memorder.tex | 38 +++++++++++++++++++-------------------
3 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/formal/formal.tex b/formal/formal.tex
index 7c1aeac..670139f 100644
--- a/formal/formal.tex
+++ b/formal/formal.tex
@@ -162,7 +162,7 @@ The larger overarching software construct is of course validated by testing.
One final approach is to consider the following two definitions and the
consequence that they imply:
-\begin{description}
+\begin{description}[itemsep=0pt,labelindent=1em]
\item[Definition:] Bug-free programs are trivial programs.
\item[Definition:] Reliable programs have no known bugs.
\item[Consequence:] Any non-trivial reliable program contains at least
diff --git a/formal/regression.tex b/formal/regression.tex
index 479ae02..e541346 100644
--- a/formal/regression.tex
+++ b/formal/regression.tex
@@ -237,7 +237,7 @@ Listing~\ref{lst:formal:Emulating Locking with cmpxchg}
Table~\ref{tab:formal:Emulating Locking: Performance (s)}
compares the performance and scalability of using the model's
\co{spin_lock()} and \co{spin_unlock()} against emulating these
-primitives as shown in the figure.
+primitives as shown in the listing.
The difference is not insignificant: At four processes, the model
is more than two orders of magnitude faster than emulation!
@@ -384,7 +384,7 @@ What happens to the reliability of this software artifact?
The perhaps surprising answer is that the reliability \emph{decreases}.
To see this, keep in mind that historical experience indicates that
-about 7\% of fixes introduce a new bug~\cite{RexBlack2012SQA}.
+about 7\,\% of fixes introduce a new bug~\cite{RexBlack2012SQA}.
Therefore, fixing the 100 bugs, which had a combined mean time to failure
(MTBF) of about 10,000 years, will introduce seven more bugs.
Historical statistics indicate that each new bug will have an MTBF
@@ -400,7 +400,7 @@ decreased the reliability of the overall software.
\QuickQuizAnswer{
We don't, but it does not matter.
- To see this, note that the 7\% figure only applies to injected
+ To see this, note that the 7\,% figure only applies to injected
bugs that were subsequently located: It necessarily ignores
any injected bugs that were never found.
Therefore, the MTBF statistics of known bugs is likely to be
diff --git a/memorder/memorder.tex b/memorder/memorder.tex
index 446f480..3ba4d3a 100644
--- a/memorder/memorder.tex
+++ b/memorder/memorder.tex
@@ -2809,25 +2809,25 @@ int z = 0;
P0(int *x, int *y)
{
- WRITE_ONCE(*x, 1);
- smp_store_release(y, 1);
+ WRITE_ONCE(*x, 1);
+ smp_store_release(y, 1);
}
P1(int *y, int *z)
{
- int r1;
+ int r1;
- r1 = smp_load_acquire(y);
- WRITE_ONCE(*z, 1);
+ r1 = smp_load_acquire(y);
+ WRITE_ONCE(*z, 1);
}
P2(int *z, int *x)
{
- int r3;
+ int r3;
- WRITE_ONCE(*z, 2);
- smp_mb();
- r2 = READ_ONCE(*x);
+ WRITE_ONCE(*z, 2);
+ smp_mb();
+ r2 = READ_ONCE(*x);
}
exists(1:r1=1 /\ 2:r2=0 /\ z=2)
@@ -2855,7 +2855,7 @@ exists(1:r1=1 /\ 2:r2=0 /\ z=2)
thereof, it is necessary to have at least one full barrier
(\co{smp_mb()} or better) between each non-store-to-load link.
In
- Figure~\ref{lst:memorder:Z6.0 Release-Acquire Chain (Ordering?)},
+ Listing~\ref{lst:memorder:Z6.0 Release-Acquire Chain (Ordering?)},
preventing the \co{exists} clause from triggering therefore requires
an additional full barrier between either \co{P0()}'s or
\co{P1()}'s accesses.
@@ -3327,7 +3327,7 @@ ordering is lost.
integer, but if memory is low, it might instead point to
the \co{reserve_int} variable.
This \co{reserve_int} case might need special handling, as
- shown on lines~6 and~7 of the figure.
+ shown on lines~6 and~7 of the listing.
But the compiler could reasonably transform this code into
the form shown in
Listing~\ref{lst:memorder:Broken Dependencies With Comparisons},
@@ -3361,7 +3361,7 @@ ordering is lost.
of either, so how can it possibly learn anything from the
comparison?
\QuickQuizAnswer{
-
+%
\begin{listing}[tbp]
{ \scriptsize
\begin{verbbox}
@@ -3381,8 +3381,8 @@ ordering is lost.
\theverbbox
\caption{Breakable Dependencies With Non-Constant Comparisons}
\label{lst:memorder:Breakable Dependencies With Non-Constant Comparisons}
-\end{listing}
-
+\end{listing}%
+%
\begin{listing}[tbp]
{ \scriptsize
\begin{verbbox}
@@ -3405,8 +3405,8 @@ ordering is lost.
\theverbbox
\caption{Broken Dependencies With Non-Constant Comparisons}
\label{lst:memorder:Broken Dependencies With Non-Constant Comparisons}
-\end{listing}
-
+\end{listing}%
+%
Unfortunately, the compiler really can learn enough to
break your dependency chain, for example, as shown in
Listing~\ref{lst:memorder:Breakable Dependencies With Non-Constant Comparisons}.
@@ -3511,7 +3511,7 @@ pointers:
Pointer comparisons can be quite tricky, and so it is well worth working
through the example shown in
-Figure~\ref{lst:memorder:Broken Dependencies With Pointer Comparisons}.
+Listing~\ref{lst:memorder:Broken Dependencies With Pointer Comparisons}.
This example uses a simple \co{struct foo} shown on lines~1-5 and
two global pointers, \co{gp1} and \co{gp2}, shown on lines~6 and~7,
respectively.
@@ -3525,7 +3525,7 @@ assigns the pointer to \co{gp1}.
Lines~19 and~20 then update two of the structure's fields, and does
so \co{after} line~18 has made those fields visible to readers.
Please note that unsynchronized update of reader-visible fields
-often constitutes a but.
+often constitutes a bug.
Although there are legitmate use cases doing just this, such use cases
require more care than is exercised in this example.
@@ -4206,7 +4206,7 @@ hacker.
The dependent-load difference between Alpha and the other CPUs is
illustrated by the code shown in
Listing~\ref{lst:memorder:Insert and Lock-Free Search}.
-This \co{smp_wmb()} on line~9 of this figure
+This \co{smp_wmb()} on line~9 of this listing
guarantees that the element initialization
in lines~6-8 is executed before the element is added to the
list on line~10, so that the lock-free search will work correctly.
--
2.7.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] formal, memorder: Fix typo and spacing
2017-11-03 15:03 [PATCH] formal, memorder: Fix typo and spacing Akira Yokosawa
@ 2017-11-03 15:53 ` Paul E. McKenney
0 siblings, 0 replies; 2+ messages in thread
From: Paul E. McKenney @ 2017-11-03 15:53 UTC (permalink / raw)
To: Akira Yokosawa; +Cc: perfbook
On Sat, Nov 04, 2017 at 12:03:47AM +0900, Akira Yokosawa wrote:
> >From 6c10afe8a85c716b09038ee210530ef6005fc28e Mon Sep 17 00:00:00 2001
> From: Akira Yokosawa <akiyks@gmail.com>
> Date: Fri, 3 Nov 2017 23:54:07 +0900
> Subject: [PATCH] formal, memorder: Fix typo and adjust spacing
>
> Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
Good eyes, queued, thank you!
Thanx, Paul
> ---
> NOTE: Addition of "%" in the Answer to Quick Quiz is to avoid any white
> spaces to be recognized by TeX engine before the first sentence of the
> answer.
>
> formal/formal.tex | 2 +-
> formal/regression.tex | 6 +++---
> memorder/memorder.tex | 38 +++++++++++++++++++-------------------
> 3 files changed, 23 insertions(+), 23 deletions(-)
>
> diff --git a/formal/formal.tex b/formal/formal.tex
> index 7c1aeac..670139f 100644
> --- a/formal/formal.tex
> +++ b/formal/formal.tex
> @@ -162,7 +162,7 @@ The larger overarching software construct is of course validated by testing.
> One final approach is to consider the following two definitions and the
> consequence that they imply:
>
> -\begin{description}
> +\begin{description}[itemsep=0pt,labelindent=1em]
> \item[Definition:] Bug-free programs are trivial programs.
> \item[Definition:] Reliable programs have no known bugs.
> \item[Consequence:] Any non-trivial reliable program contains at least
> diff --git a/formal/regression.tex b/formal/regression.tex
> index 479ae02..e541346 100644
> --- a/formal/regression.tex
> +++ b/formal/regression.tex
> @@ -237,7 +237,7 @@ Listing~\ref{lst:formal:Emulating Locking with cmpxchg}
> Table~\ref{tab:formal:Emulating Locking: Performance (s)}
> compares the performance and scalability of using the model's
> \co{spin_lock()} and \co{spin_unlock()} against emulating these
> -primitives as shown in the figure.
> +primitives as shown in the listing.
> The difference is not insignificant: At four processes, the model
> is more than two orders of magnitude faster than emulation!
>
> @@ -384,7 +384,7 @@ What happens to the reliability of this software artifact?
> The perhaps surprising answer is that the reliability \emph{decreases}.
>
> To see this, keep in mind that historical experience indicates that
> -about 7\% of fixes introduce a new bug~\cite{RexBlack2012SQA}.
> +about 7\,\% of fixes introduce a new bug~\cite{RexBlack2012SQA}.
> Therefore, fixing the 100 bugs, which had a combined mean time to failure
> (MTBF) of about 10,000 years, will introduce seven more bugs.
> Historical statistics indicate that each new bug will have an MTBF
> @@ -400,7 +400,7 @@ decreased the reliability of the overall software.
> \QuickQuizAnswer{
> We don't, but it does not matter.
>
> - To see this, note that the 7\% figure only applies to injected
> + To see this, note that the 7\,% figure only applies to injected
> bugs that were subsequently located: It necessarily ignores
> any injected bugs that were never found.
> Therefore, the MTBF statistics of known bugs is likely to be
> diff --git a/memorder/memorder.tex b/memorder/memorder.tex
> index 446f480..3ba4d3a 100644
> --- a/memorder/memorder.tex
> +++ b/memorder/memorder.tex
> @@ -2809,25 +2809,25 @@ int z = 0;
>
> P0(int *x, int *y)
> {
> - WRITE_ONCE(*x, 1);
> - smp_store_release(y, 1);
> + WRITE_ONCE(*x, 1);
> + smp_store_release(y, 1);
> }
>
> P1(int *y, int *z)
> {
> - int r1;
> + int r1;
>
> - r1 = smp_load_acquire(y);
> - WRITE_ONCE(*z, 1);
> + r1 = smp_load_acquire(y);
> + WRITE_ONCE(*z, 1);
> }
>
> P2(int *z, int *x)
> {
> - int r3;
> + int r3;
>
> - WRITE_ONCE(*z, 2);
> - smp_mb();
> - r2 = READ_ONCE(*x);
> + WRITE_ONCE(*z, 2);
> + smp_mb();
> + r2 = READ_ONCE(*x);
> }
>
> exists(1:r1=1 /\ 2:r2=0 /\ z=2)
> @@ -2855,7 +2855,7 @@ exists(1:r1=1 /\ 2:r2=0 /\ z=2)
> thereof, it is necessary to have at least one full barrier
> (\co{smp_mb()} or better) between each non-store-to-load link.
> In
> - Figure~\ref{lst:memorder:Z6.0 Release-Acquire Chain (Ordering?)},
> + Listing~\ref{lst:memorder:Z6.0 Release-Acquire Chain (Ordering?)},
> preventing the \co{exists} clause from triggering therefore requires
> an additional full barrier between either \co{P0()}'s or
> \co{P1()}'s accesses.
> @@ -3327,7 +3327,7 @@ ordering is lost.
> integer, but if memory is low, it might instead point to
> the \co{reserve_int} variable.
> This \co{reserve_int} case might need special handling, as
> - shown on lines~6 and~7 of the figure.
> + shown on lines~6 and~7 of the listing.
> But the compiler could reasonably transform this code into
> the form shown in
> Listing~\ref{lst:memorder:Broken Dependencies With Comparisons},
> @@ -3361,7 +3361,7 @@ ordering is lost.
> of either, so how can it possibly learn anything from the
> comparison?
> \QuickQuizAnswer{
> -
> +%
> \begin{listing}[tbp]
> { \scriptsize
> \begin{verbbox}
> @@ -3381,8 +3381,8 @@ ordering is lost.
> \theverbbox
> \caption{Breakable Dependencies With Non-Constant Comparisons}
> \label{lst:memorder:Breakable Dependencies With Non-Constant Comparisons}
> -\end{listing}
> -
> +\end{listing}%
> +%
> \begin{listing}[tbp]
> { \scriptsize
> \begin{verbbox}
> @@ -3405,8 +3405,8 @@ ordering is lost.
> \theverbbox
> \caption{Broken Dependencies With Non-Constant Comparisons}
> \label{lst:memorder:Broken Dependencies With Non-Constant Comparisons}
> -\end{listing}
> -
> +\end{listing}%
> +%
> Unfortunately, the compiler really can learn enough to
> break your dependency chain, for example, as shown in
> Listing~\ref{lst:memorder:Breakable Dependencies With Non-Constant Comparisons}.
> @@ -3511,7 +3511,7 @@ pointers:
>
> Pointer comparisons can be quite tricky, and so it is well worth working
> through the example shown in
> -Figure~\ref{lst:memorder:Broken Dependencies With Pointer Comparisons}.
> +Listing~\ref{lst:memorder:Broken Dependencies With Pointer Comparisons}.
> This example uses a simple \co{struct foo} shown on lines~1-5 and
> two global pointers, \co{gp1} and \co{gp2}, shown on lines~6 and~7,
> respectively.
> @@ -3525,7 +3525,7 @@ assigns the pointer to \co{gp1}.
> Lines~19 and~20 then update two of the structure's fields, and does
> so \co{after} line~18 has made those fields visible to readers.
> Please note that unsynchronized update of reader-visible fields
> -often constitutes a but.
> +often constitutes a bug.
> Although there are legitmate use cases doing just this, such use cases
> require more care than is exercised in this example.
>
> @@ -4206,7 +4206,7 @@ hacker.
> The dependent-load difference between Alpha and the other CPUs is
> illustrated by the code shown in
> Listing~\ref{lst:memorder:Insert and Lock-Free Search}.
> -This \co{smp_wmb()} on line~9 of this figure
> +This \co{smp_wmb()} on line~9 of this listing
> guarantees that the element initialization
> in lines~6-8 is executed before the element is added to the
> list on line~10, so that the lock-free search will work correctly.
> --
> 2.7.4
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-11-03 15:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-03 15:03 [PATCH] formal, memorder: Fix typo and spacing Akira Yokosawa
2017-11-03 15:53 ` Paul E. McKenney
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.