[{"data":1,"prerenderedAt":238},["ShallowReactive",2],{"project-29637986":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":42,"post_text":44,"what":45,"said":61,"maker_in_thread":149,"shape":158,"grid":162,"attempts":201,"same_week":202,"maker_shows":43,"maker_hidden":231,"reader_version":232,"card":233},"29637986","crzy64","\"crzy64\", base64 mod aimed for fastest decoding","title","Show HN: \"crzy64\", base64 mod aimed for fastest decoding","https:\u002F\u002Fgithub.com\u002Filyakurdyukov\u002Fcrzy64","github.com","jpegqs",1640098851,2021,47,18,890,2533,36,"shown","languages","encoding library","library",[24,25,26,27,28],"base64","base64 decoding","fast decoding","simd","swar","curious",-0.08,{"positive":32,"neutral":33,"mixed":34,"critical":35},1,8,0,3,12,{"docs":38,"idea":39,"performance":41},{"positive":34,"critical":34},{"positive":32,"critical":40},2,{"positive":34,"critical":32},[35,34,43,34,34,35,34,34,35,32,35,35,34,35,35,35,32,32],5,null,{"problem":46,"audience":44,"pricing":44,"motivation":52,"time_to_build":44,"stack":58,"openness":59,"stage":60,"team_size":60},{"value":47,"source":48,"evidence":49},"Slow base64 decoding","maker",[50],{"id":51},"post",{"value":53,"source":48,"evidence":54},"Modify the base64 standard to make decoding easier",[55],{"id":56,"by":11,"text":57},"29645507","I know that. My approach is different: instead of finding the fastest solution to deal with the existing base64 standard, I modify the standard to make it easier to decode.…",[],"open_source","unknown",{"praise":62,"objections":71,"requests":108,"questions":120,"alternatives":136},[63],{"value":64,"source":65,"evidence":66},"Clear algorithm description of the bit reordering and XOR trick","commenter",[67],{"id":68,"by":69,"text":70},"29642958","lifthrasiir","It would have been better to have an algorithm description somewhere, but it is not hard to follow. So crzy64 is essentially base64 plus two optimizations: - Output bytes…",[72,79,93],{"value":73,"source":65,"evidence":74},"Thread is sparse on details about the modifications",[75],{"id":76,"by":77,"text":78},"29638759","cornstalks","I want to say this looks interesting but it's so sparse on details it's hard to say. What modifications were made to base64? Is the only modification replacing \"+\" with \".\"? Is…",{"value":80,"source":65,"evidence":81},"Memory bandwidth limits gains; may not be faster than memcpy",[82,86,89],{"id":83,"by":84,"text":85},"29638521","vortico","Isn't base64 encoding\u002Fdecoding bound to memory bandwidth? If so, won't all 4\u002F3 memory formats encode\u002Fdecode at the same speed?",{"id":87,"by":11,"text":88},"29638654","Memory bandwidth is the limit, so you can't make it faster than memcpy(). However, copying memory is still faster than these algorithms, аnd it's complicated to make the…",{"id":90,"by":91,"text":92},"29641241","sitkack","Memory bandwidth is a complex beast, one should be able to get 50GB\u002Fs for short decodes of single to double digit k on modern hardware. The author measured 11GB\u002Fs ish in their…",{"value":94,"source":65,"evidence":95},"Prior art exists (UU-encode, Ascii85, SSE base64)",[96,100,104],{"id":97,"by":98,"text":99},"29639429","bellyfullofbac","I wonder if they just reinvented UU-(en,de)code: https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FUuencoding I guess it'll go... nowhere.",{"id":101,"by":102,"text":103},"29642292","Thoreandan","There's been prior art, I was immediately reminded of Ascii85 https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBinary-to-text_encoding#Encoding_standards Incidentally every Windows desktop now has…",{"id":105,"by":106,"text":107},"29641378","superjan","There has been work done one optimizing regular base64 using SSE: http:\u002F\u002Fwww.alfredklomp.com\u002Fprogramming\u002Fsse-base64\u002F",[109,116],{"value":110,"source":65,"evidence":111},"Benchmarks for decoding many small inputs",[112,113],{"id":76,"by":77,"text":78},{"id":114,"by":11,"text":115},"29645445","> Is the rest of the table[1] unchanged? The rest is unchanged, but there is a trick in that the table indexes are shuffled, and shuffled differently depending on the neighboring…",{"value":117,"source":65,"evidence":118},"Support for URL-safe base64url characters",[119],{"id":76,"by":77,"text":78},[121,132],{"value":122,"source":65,"evidence":123},"What 64 characters does it encode to?",[124,128],{"id":125,"by":126,"text":127},"29638985","rep_movsd","Can you tell us what set of 64 characters it encodes to?",{"id":129,"by":130,"text":131},"29639340","skykooler","Going off the readme, it appears to use \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.\u002F\" though not necessarily in that order.",{"value":133,"source":65,"evidence":134},"How does it compare to optimized standard base64 implementations?",[135],{"id":76,"by":77,"text":78},[137,141,145],{"value":138,"source":65,"evidence":139},"Standard SSE base64 implementation by Alfred Klomp",[140],{"id":105,"by":106,"text":107},{"value":142,"source":65,"evidence":143},"UU-encoding",[144],{"id":97,"by":98,"text":99},{"value":146,"source":65,"evidence":147},"Ascii85",[148],{"id":101,"by":102,"text":103},{"comments":43,"answered":40,"key":150},[151,152,155],{"id":114,"text":115},{"id":153,"text":154},"29659090","Great description, but there is a typo in the second row: ``` 00000000 abcdefgh ijklmnop qrstuvwx -------- -------- -------- -------- 00abcdef 00ijklgh 00qrmnop 00stuvwx 0000ijkl…",{"id":156,"text":157},"29663150","Still can't improve this stage of encoding, it requires a lot of operations. Maybe there is something trivial, but I don't see it.",{"commenters":159,"max_depth":35,"maker_replies":43,"first_comment_mins":160,"lifespan_hours":161},14,50,49,[163,165,167,169,171,173,175,176,180,183,185,188,189,190,195,196,197,200],[76,34,35,164,77,34],"project\u002Fneutral\u002Fdocs",[114,34,34,166,11,32],"project\u002Fneutral\u002Fidea",[68,32,43,168,69,34],"project\u002Fpositive\u002Fidea",[153,32,34,170,11,32],"maker\u002Fneutral\u002Fdocs",[156,32,34,172,11,32],"maker\u002Fneutral\u002Fperformance",[83,40,35,174,84,34],"project\u002Fneutral\u002Fperformance",[87,40,34,174,11,32],[177,40,34,178,179,34],"29644765","commenter\u002Fneutral\u002Fperformance","remram",[181,40,35,174,182,34],"29639474","stingraycharles",[90,40,32,184,91,34],"project\u002Fcritical\u002Fperformance",[186,40,35,174,187,34],"29639671","fulafel",[105,35,35,166,106,34],[56,35,34,166,11,32],[191,192,35,193,194,34],"29640868",4,"project\u002Fneutral\u002Fnone","kazinator",[125,43,35,164,126,34],[129,43,35,164,130,34],[97,198,32,199,98,34],6,"project\u002Fcritical\u002Fidea",[101,198,32,199,102,34],[],[203,207,212,217,222,227],{"id":204,"name":205,"points":206,"category":20},"29630293","SectorLISP",513,{"id":208,"name":209,"points":210,"category":211},"29620235","fourlightyears.blogspot.com",343,"hardware",{"id":213,"name":214,"points":215,"category":216},"29637188","SlikSafe",284,"infrastructure",{"id":218,"name":219,"points":220,"category":221},"29605429","Lindy Hacker News",221,"learning_science",{"id":223,"name":224,"points":225,"category":226},"29622970","All Black Screen",121,"web_saas",{"id":228,"name":229,"points":230,"category":20},"29628772","Fiber",119,false,"v2",{"id":234,"name":5,"line":6,"ai":231,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":30,"top":18,"kw":235,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":236,"url":9,"mix":237,"praise":64,"objection":73,"sub":21},29637986,[24,25,26,27,28],"305003003133033311",[32,33,34,35],1794036614447]