Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    I

    Igor Ostrovsky

    igoro.com · Personal blog · on HN since 2008

    Igor Ostrovsky, a software engineer, writes explanatory posts on CPU caches, branch prediction, RAID, GPUs, and the C# memory model.

    Visit blogHN submissions
    Systems & PerformanceHardware & ElectronicsProgramming
    What HN says

    HN commenters call the whole blog a nice read and link its processor cache effects gallery, RAID-6 explanation, and volatile keyword memory model post.

    Stats for nerds
    35HN people shared it
    39linked in comments
    827story points
    May 2023last shared
    2011people per year2023

    Top posts on HN

    1. 1
      Gallery of Processor Cache Effects
      13 people · 426 points · first shared 2010 · 36 comments on HN
    2. 2
      Skip Lists are Fascinating
      1 person · 112 points · first shared 2011 · 34 comments on HN
    3. 3
      How RAID-6 dual parity calculation works
      3 people · 56 points · first shared 2014 · 7 comments on HN
    4. 4
      How GPU came to be used for general computation
      2 people · 52 points · first shared 2010 · 17 comments on HN
    5. 5
      Human heart is a Turing machine, research on XBox 360 shows. Wait, what?
      3 people · 38 points · first shared 2009 · 6 comments on HN
    6. 6
      Fast and slow if-statements: branch prediction in modern processors
      2 people · 37 points · first shared 2010 · 24 comments on HN
    7. 7
      NET Memory model and the volatile keyword (2010)
      1 person · 35 points · first shared 2015 · 3 comments on HN
    8. 8
      How to write a self-printing program
      2 people · 21 points · first shared 2012 · 14 comments on HN
    9. 9
      Graphs, trees, and the origin of humanity
      1 person · 19 points · first shared 2010 · 2 comments on HN
    10. 10
      What really happens when you navigate to a URL
      2 people · 7 points · first shared 2010 · Discussion on HN

    What HN people wrote when they linked it

    • malkiaAug 2015

      Long time ago, I've did some experiments with luajit and branching (well more like the CPU). It was based on this article: http://igoro.com/archive/fast-and-slow-if-statements-branch-prediction-in-modern-processors/

      https://raw.githubusercontent.com/malkia/ufo/master/samples/bench/badif.lua

      local ffi = require("ffi")
      local band = bit.band

      local function test(n, m)
      local count = 0; for i=1, n do if band(i, m)==0 then count = count + 1 end end return count
      end

      local function timeit(m)
      local t = os.clock()
      test(0xFFFFFFF,m)
      local t = os.clock() - t
      print(string.format("%08X",m),t)
      end

      timeit(0x80000000)
      timeit(0xffffffff)
      timeit(1)
      timeit(3)
      timeit(2)
      timeit(4)
      timeit(8)
      timeit(16)

      --[[
      -- This is on OSX 10.7.2 MBP 2008 Jan build
      ./luajit samples/badif.lua
      80000000 14.067395
      FFFFFFFF 20.252955
      00000001 13.497108
      00000003 17.337942
      00000002 14.142266
      00000004 14.221376
      00000008 14.42377
      00000010 14.708237
      --]]

      Results now - 2015 (again Macbook OSX, much better than before and also luajit 2.0.4):

      80000000 0.247822
      FFFFFFFF 1.253168
      00000001 0.664586
      00000003 0.974336
      00000002 0.676823
      00000004 0.679609
      00000008 0.675207
      00000010 0.673961

      without jit, just interpretter (pretty much the same results):

      $ src/luajit -joff ~/badif.lua

      80000000 3.329909
      FFFFFFFF 3.553143
      00000001 3.440378
      00000003 3.484646
      00000002 3.424834
      00000004 3.424539
      00000008 3.616981
      …

    • mratsimNov 2019

      Good question.

      I can't find a single SPIR-V AXPY (a*X+y) example which is the Hello World of linear algebra in Vulkan/SPIR-V so I'm not optimistic on ease of use.

      You can probably do texture hacks like what people did in 2006 when they realized that GPU were fast for linear algebra and OpenCL/Cuda did not exist (https://igoro.com/archive/how-gpu-came-to-be-used-for-general-computation/)

      The best would probably be to follow this Halide issue and the corresponding branches: https://github.com/halide/Halide/issues/2296. Note that Halide is a compiler so it automates lots of the boilerplate that is probably needed to Vulkan for compute compared to Cuda.

    • thomas43Jun 2020

      Do you have some more detaile about your app?

      I use perf, sysprof, trace32, visual studio profiler for profiling, but this highly depends on your environment.

      These assorted links might be interesting to you:

      - https://github.com/Kobzol/hardware-effects

      - https://www.youtube.com/watch?v=FJJTYQYB1JQ

      - https://godbolt.org/

      - http://igoro.com/archive/gallery-of-processor-cache-effects/

    • FrankyHollywoodMay 2023

      This is a nice read too (the whole blog actually)

      http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/

      It's a bit old by now (2010), but I always remembered the mental model Igor created.

    • xtacyDec 2011

      On a related node, this page also has an interesting visualisation of the effects of cache misses on program performance: http://igoro.com/archive/gallery-of-processor-cache-effects

    • gameshot911May 2018

      Link below with more info, for those who were interested like me!

      http://igoro.com/archive/how-raid-6-dual-parity-calculation-works/

    Related

    1024cores1024cores.net36 people

    Lockfree Algorithms (2010)

    1024cores
    Personal · last shared 2025
    Probably Danceprobablydance.com74 people

    Fibonacci Hashing: The Optimization That the World Forgot

    Probably Dance
    Personal · last shared 2026
    Twitch Engineering Blogblog.twitch.tv178 people

    Go’s march to low-latency GC

    Twitch Engineering Blog
    Company · last shared 2026
    Karl Ruppkarlrupp.net16 people

    40 Years of Microprocessor Trend Data (2015)

    Karl Rupp
    Personal · last shared 2025
    Chris Siebenmannutcc.utoronto.ca/~cks388 people

    Go is Google's language, not ours

    Chris Siebenmann
    Personal · last shared 2026
    Random ASCIIrandomascii.wordpress.com274 people

    There are only four billion floats, so test them all (2014)

    Random ASCII
    Personal · last shared 2026
    Daniel Lemirelemire.me500 people

    Xor Filters: Faster and Smaller Than Bloom Filters

    Daniel Lemire
    Personal · last shared 2026
    John Regehrblog.regehr.org401 people

    Teaching C

    John Regehr
    Personal · last shared 2026