<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: _chris_</title><link>https://news.ycombinator.com/user?id=_chris_</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 18 Aug 2026 11:02:48 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=_chris_" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by _chris_ in "RISC-V: They Should Have Known Better"]]></title><description><![CDATA[
<p>1B through 15B variable length instruction mess, for one. Which still yields a worse than average 4-5B per instruction average.</p>
]]></description><pubDate>Sat, 15 Aug 2026 19:31:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=49313523</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=49313523</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49313523</guid></item><item><title><![CDATA[New comment by _chris_ in "My thoughts on renting versus buying"]]></title><description><![CDATA[
<p>Longer time horizon -- mortage inflates away. In the short-term, only need to beat the property tax bill, especially if the interest rate is <3% and the property is increasing in value faster than that.</p>
]]></description><pubDate>Sun, 14 Sep 2025 22:41:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=45244018</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=45244018</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45244018</guid></item><item><title><![CDATA[New comment by _chris_ in "Branch prediction: Why CPUs can't wait?"]]></title><description><![CDATA[
<p>A BPU needs to predict 3 things:<p><pre><code>  - 1) Is there a branch here?
  - 2) If so, is it taken?
  - 3) If so, where to?
</code></pre>
If a conditional branch is never taken, then it's effectively a NOP, and you never store it anywhere, so you treat (1) as "no there isn't a branch here." Doesn't get cheaper than that.<p>Of course, (1) and (3) are very important, so you pick your hashes to reduce aliasing to some low, but acceptable level. Otherwise you just have to eat mispredicts if you alias too much.<p>Note: (1) and (3) aren't really functions of history, they're functions of their static location in the binary (I'm simplifying a tad but whatever). You can more freely alias on (2), which is very history-dependent, because (1) will guard it.</p>
]]></description><pubDate>Tue, 19 Aug 2025 22:11:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=44956728</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=44956728</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44956728</guid></item><item><title><![CDATA[New comment by _chris_ in "Branch prediction: Why CPUs can't wait?"]]></title><description><![CDATA[
<p>> A lot of the time this is a hint to the compiler on what the expected paths are so it can keep those paths linear. IIRC, this mainly helps instruction cache locality.<p>The real value is that the easiest branch to predict is a never-taken branch. So if the compiler can turn a branch into a never-taken branch with the common path being straight line code, then you win big.<p>And it takes no space or effort to predict never taken branches.</p>
]]></description><pubDate>Tue, 19 Aug 2025 21:39:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44956513</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=44956513</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44956513</guid></item><item><title><![CDATA[New comment by _chris_ in "Branch prediction: Why CPUs can't wait?"]]></title><description><![CDATA[
<p>> The thing holding back VLIW was compilers were too dumb<p>That’s not really the problem.<p>The real issue is that VLIW requires branches to be strongly biased, statically, so a compiler can exploit them.<p>But in fact branches are very dynamic but trivially predicted by branch predictors, so branch predictors win.<p>Not to mention that even vliw cores use branch predictors, because the branch resolution latency is too long to wait for the branch outcome to be known.</p>
]]></description><pubDate>Tue, 19 Aug 2025 21:35:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=44956481</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=44956481</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44956481</guid></item><item><title><![CDATA[New comment by _chris_ in "Pi-hole v6"]]></title><description><![CDATA[
<p>Wouldn’t a smart tv do something ... smarter than just using the default dns given to it by the network?<p>I’m not up to speed on this stuff but I thought pihole only blocked the simplest stuff from devices that play nice?</p>
]]></description><pubDate>Tue, 18 Feb 2025 20:38:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43094774</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=43094774</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43094774</guid></item><item><title><![CDATA[New comment by _chris_ in "T1: A RISC-V Vector processor implementation"]]></title><description><![CDATA[
<p>It’s not that hard to debug— your signal names and register names all carry through. Sure, lots of temp wires get generated but that’s never where your bug is.</p>
]]></description><pubDate>Thu, 06 Feb 2025 21:22:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=42966615</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=42966615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42966615</guid></item><item><title><![CDATA[New comment by _chris_ in "Intel Honesty"]]></title><description><![CDATA[
<p>> <i>allow to select the purchase price within the last 2 years</i><p>I don't think that's true. My reading of that is "you lock in the price on your start date and can keep that for the next 2 years going forward". That doesn't help anybody joining at >$1k / share. :D (and that's only ESPP, not standard stock compensation).</p>
]]></description><pubDate>Wed, 04 Sep 2024 21:56:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=41451290</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=41451290</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41451290</guid></item><item><title><![CDATA[New comment by _chris_ in "The Itanic Saga: The History of VLIW and Itanium"]]></title><description><![CDATA[
<p>> <i>I’d be interested in understanding why the compilers never panned out but have never seen a good writeup on that. Or why people thought the compilers would be able to succeed in the first place at the mission.</i><p>It's a fundamentally impossible ask.<p>Compilers are being asked to look at a program (perhaps watch it run a sample set) and guess the bias of each branch to construct a most-likely 'trace' path through the program, and then generate STATIC code for that path.<p>But programs (and their branches) are not <i>statically biased</i>! So it simply doesn't work out for general-purpose codes.<p>However, programs are fairly <i>predictable</i>, which means a branch predictor can <i>dynamically</i> learn the program path and regurgitate it on command. And if the program changes phases, the branch predictor can re-learn the new program path very quickly.<p>Now if you wanted to couple a VLIW design with a dynamically re-executing compiler (dynamic binary translation), then sure, that can be made to work.</p>
]]></description><pubDate>Wed, 24 Jan 2024 10:32:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=39115765</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=39115765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39115765</guid></item><item><title><![CDATA[New comment by _chris_ in "How to Design an ISA"]]></title><description><![CDATA[
<p>> <i>L1i matters, people!</i><p>RISC-V consistently wins on L1i footprint.<p>The complaining is about number of dynamic instructions ("path length"), which can hit you if you don't fuse. Of course, path length might not actually be the bottleneck to raw performance, but it's an easy metric to argue, so a lot of people latch on to it.</p>
]]></description><pubDate>Thu, 18 Jan 2024 19:57:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=39046786</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=39046786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39046786</guid></item><item><title><![CDATA[New comment by _chris_ in "Cascade: CPU fuzzing via intricate program generation"]]></title><description><![CDATA[
<p>> > Cascade discovered 4 bugs in BOOM and CVA6 that produce wrong output val- ues regardless of the microarchitectural state<p>> These are unacceptable bugs, showing a lack of architectural tests. It means no one ever ran those instructions and checked the result. The community should be able to fix this.<p>For BOOM it looks like the only 2 bugs found were miscounting on the inst-retired perf counter if software over-wrote it, and a fdiv.s/fsqrt.s that always listened to the dynamic rounding mode instead of the statically provided rounding mode, when specified. Not great, but recoverable.</p>
]]></description><pubDate>Wed, 25 Oct 2023 21:32:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=38018678</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=38018678</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38018678</guid></item><item><title><![CDATA[New comment by _chris_ in "Cascade: CPU fuzzing via intricate program generation"]]></title><description><![CDATA[
<p>Looks like from Appendix D that only 2 bugs were found in BOOM:<p>> 1. Inaccurate instruction count when minstret is written by software<p>I don't know what that means, but having minstret written by software was definitely not something I ever tested. In general, perf counters are likely to be undertested.<p>> 2. Static rounding is ignored for fdiv.s and fsqrt.s<p>A mistake was made in only listening to the dynamic rounding mode for the fdiv/sqrt unit. This is one of those bugs that is trivially found if you test for it, but it turns out that no benchmarking ever cared about this and from all of the fuzzers I used when I worked on BOOM, NONE of them hit it (including commercial ones...). Ooops.<p>Fixed here: <a href="https://github.com/riscv-boom/riscv-boom/pull/629/files">https://github.com/riscv-boom/riscv-boom/pull/629/files</a></p>
]]></description><pubDate>Wed, 25 Oct 2023 21:29:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=38018637</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=38018637</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38018637</guid></item><item><title><![CDATA[New comment by _chris_ in "RISC-V Origins and Architecture, Part 1"]]></title><description><![CDATA[
<p>If you want to do some further archeology, check out the SMIPS ISA, which I believe dates back to 2005 (which itself gradually evolved from the T0/Scale/6.371 MIPS ISAs; and the earliest, T0, was derived from MIPS-II).</p>
]]></description><pubDate>Tue, 08 Aug 2023 05:35:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=37044899</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=37044899</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37044899</guid></item><item><title><![CDATA[New comment by _chris_ in "RISC-V Origins and Architecture, Part 1"]]></title><description><![CDATA[
<p>I also get a permission error: but I think this (<a href="https://inst.eecs.berkeley.edu/~cs250/fa10/handouts/lab2-riscv-v2-vcs-dc.pdf" rel="nofollow noreferrer">https://inst.eecs.berkeley.edu/~cs250/fa10/handouts/lab2-ris...</a>) is the same file, and functionally the same as the fa11 version?<p>I think RDNPC is what I was thinking of, but I can't at all remember what was perceived as "risky" about it. I may be overblowing something from memory. AUIPC is better anyways.</p>
]]></description><pubDate>Tue, 08 Aug 2023 03:26:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=37044165</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=37044165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37044165</guid></item><item><title><![CDATA[New comment by _chris_ in "RISC-V Origins and Architecture, Part 1"]]></title><description><![CDATA[
<p>To add to this, Andrew et. al. at Berkeley built SPARC cores, so they were well aware of what it took to implement hardware to run SPARC software. I believe some of the really annoying challenges were at the system/privileged architecture level, including issues where off-the-shelf privileged software was either not obeying the specification or instead relied on undefined/underdefined corner cases. I believe RISCV's atomic read/modify/write CSR behavior was informed from some of these experiences.</p>
]]></description><pubDate>Mon, 07 Aug 2023 20:37:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=37040625</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=37040625</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37040625</guid></item><item><title><![CDATA[New comment by _chris_ in "RISC-V Origins and Architecture, Part 1"]]></title><description><![CDATA[
<p>I believe early on there was a change to a pre-AUIPC instruction due to potential infringement fears (for PC-relative indexing); but everything else was understood to be following well-worn paths.</p>
]]></description><pubDate>Mon, 07 Aug 2023 20:33:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=37040572</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=37040572</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37040572</guid></item><item><title><![CDATA[New comment by _chris_ in "Advanced Performance Extensions (APX)"]]></title><description><![CDATA[
<p>And adds non-destructive instructions.<p>> "In addition, legacy integer instructions now can also use EVEX to encode a dedicated destination register operand – turning them into three-operand instructions and reducing the need for extra register move instructions."<p>Overall, APX is providing 10% fewer instructions, 10% fewer loads and more than 20% fewer stores.<p>Also adding pop2/push2 instructions for moving state faster.<p>And adding more powerful conditional instructions (loads/stores/compares) and flag-suppression.</p>
]]></description><pubDate>Mon, 24 Jul 2023 20:09:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=36853545</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=36853545</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36853545</guid></item><item><title><![CDATA[New comment by _chris_ in "It's done in hardware so it's cheap (2012)"]]></title><description><![CDATA[
<p>> their clean orthogonal instruction encoding is so inefficient (e.g. it wastes a lot of instruction cache)<p>Perhaps, although ARMv8 is fixed 4 bytes and x86-64 averages more than 4 bytes an instruction despite each x86 instruction mapping to more than 1.0 uops on average. Oops.</p>
]]></description><pubDate>Fri, 27 May 2022 05:08:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=31526188</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=31526188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31526188</guid></item><item><title><![CDATA[New comment by _chris_ in "Adding custom RISC-V instructions to an open-source rv32 SoC"]]></title><description><![CDATA[
<p>Custom opcodes have a protected spot in the opcode map; but there's nothing that prevents two different CPUs from using the same custom opcode pattern to mean two different instructions.<p>Conceivably, you could trap, look up something like the mvendor/march CSRs to triangulate CPUID, and Do the Right Thing, but you usually added a custom opcode because you believe your performance/use-case depends on it.<p>Basically, your Option #3: "don't distribute binaries with custom instructions." If it's so important, it should get pushed through the standards process and then the binaries can be portable.</p>
]]></description><pubDate>Wed, 02 Feb 2022 17:18:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=30180567</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=30180567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30180567</guid></item><item><title><![CDATA[New comment by _chris_ in "RISC-V Int. Ratifies 15 New Specs, Opening Up New RISC-V Design Possibilities"]]></title><description><![CDATA[
<p>Very different. RISC-V's vectors (RVV) are "variable length", so the programmer can request a length and the machine tells you what it can give you. Different machine versions can change the underlying vector size and the code Will Just Work.<p>This is different from "fixed-width SIMD" which has a hard-coded vector length. To make things more challenging for the programmer/compiler, I believe most x86 SIMD versions also don't provide a "mask" register, so you're stuck with using all vector elements (AVX512 added masks).<p>Each has its advantages and disadvantages (esp. on the design complexity vs programmer/compiler interface complexity).<p>RVV also provides a mechanism to reconfigure the register file, ganging logical registers together to get longer effective vector lengths.</p>
]]></description><pubDate>Thu, 02 Dec 2021 18:45:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=29420516</link><dc:creator>_chris_</dc:creator><comments>https://news.ycombinator.com/item?id=29420516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29420516</guid></item></channel></rss>