diff --git a/src/Sorcery/Pages/Sourcery/Posts/SimdCheatCodesForFreePerformance.razor b/src/Sorcery/Pages/Sourcery/Posts/SimdCheatCodesForFreePerformance.razor index 12819c0..bdde5bc 100644 --- a/src/Sorcery/Pages/Sourcery/Posts/SimdCheatCodesForFreePerformance.razor +++ b/src/Sorcery/Pages/Sourcery/Posts/SimdCheatCodesForFreePerformance.razor @@ -8,7 +8,7 @@ public static readonly RenderFragment Introduction = __builder => { - However, modern CPUs have special instructions for a more complex mode of execution, + Modern CPUs have special instructions for a more complex mode of execution, together with separate registers for those instructions only. These are cheat codes that compilers and library developers use to get massive performance gains without fundamentally changing the algorithm being executed. @@ -48,8 +48,8 @@ The magical world of new instructions and registers I mentioned at the start is not actually needed to apply this concept. Consider the following toy problem. - - The Discrepancy Problem. — + + The Discrepancy Problem — We are given two streams of $8$-bit measurements from two sensors over some time period. We expect them to be the same, but since anomalies can occur we want to detect the first place at which they differ, if it exists. @@ -154,6 +154,7 @@ private int? Simd64(ReadOnlySpan sensor1, ReadOnlySpan sensor2) { throw new ArgumentException(""Unequal stream lengths""); } + const int Size = 8; // Take the cleanly divisible part and leave the remainders for later. @@ -238,7 +239,8 @@ code, including memory latency, and without proper profiling we cannot identify Clever Bitwise Tricks
- There's a small wrinkle that doesn't really affect performance, but understanding + There's a small wrinkle that doesn't really affect performance in this case – it happens + at most once at the end – but understanding how to fix it will go a long way. The sequential part of finding the exact place in a block where there's a discrepancy is not elegant and can be done with a small trick. @@ -262,14 +264,15 @@ code, including memory latency, and without proper profiling we cannot identify vectors were identical. Thus, the check on the blocks now becomes: diff --git a/src/Sorcery/Pages/Sourcery/Sourcery.razor b/src/Sorcery/Pages/Sourcery/Sourcery.razor index 0d7e0c7..dcb2cfd 100644 --- a/src/Sorcery/Pages/Sourcery/Sourcery.razor +++ b/src/Sorcery/Pages/Sourcery/Sourcery.razor @@ -18,7 +18,7 @@ @foreach (var post in BlogBook.Posts.Take(3)) { - + } diff --git a/src/Sorcery/Shared/Components/Header2.razor b/src/Sorcery/Shared/Components/Header2.razor index 52dd85c..a2a11b4 100644 --- a/src/Sorcery/Shared/Components/Header2.razor +++ b/src/Sorcery/Shared/Components/Header2.razor @@ -1,4 +1,4 @@ -@ChildContent +@ChildContent @code { diff --git a/src/Sorcery/Shared/Components/Header3.razor b/src/Sorcery/Shared/Components/Header3.razor index 82f3b8b..7371637 100644 --- a/src/Sorcery/Shared/Components/Header3.razor +++ b/src/Sorcery/Shared/Components/Header3.razor @@ -1,4 +1,4 @@ -@ChildContent +@ChildContent @code { diff --git a/src/Sorcery/Shared/Components/Header4.razor b/src/Sorcery/Shared/Components/Header4.razor index 6b4d9e5..527aec7 100644 --- a/src/Sorcery/Shared/Components/Header4.razor +++ b/src/Sorcery/Shared/Components/Header4.razor @@ -1,4 +1,4 @@ -@ChildContent +@ChildContent @code { diff --git a/src/Sorcery/Shared/Components/LatexRenderer.razor b/src/Sorcery/Shared/Components/LatexRenderer.razor index 61fe510..28cd002 100644 --- a/src/Sorcery/Shared/Components/LatexRenderer.razor +++ b/src/Sorcery/Shared/Components/LatexRenderer.razor @@ -12,19 +12,19 @@ { delimiters = new[] { - new - { - left = "$$", - right = "$$", - display = true - }, - new - { - left = "$", - right = "$", - display = false - } - }, + new + { + left = "$$", + right = "$$", + display = true + }, + new + { + left = "$", + right = "$", + display = false + } + }, throwOnError = true };