csharp-source-generators
SortingNetworks | csharp-source-generators | |
---|---|---|
7 | 9 | |
20 | 1,880 | |
- | - | |
5.2 | 7.6 | |
over 2 years ago | 9 days ago | |
C# | ||
MIT License | Creative Commons Zero v1.0 Universal |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
SortingNetworks
-
NSA Cybersecurity Information Sheet remarks on C and C++.
On a side-note: I did an experiment to see whether C# could match C++ for vector-intensive computing: https://github.com/zvrba/SortingNetworks
-
What are the hardest topics in C#/.NET you would like to know more/better?
Here's a concrete example of using pointers to access raw array memory and use SIMD intrinsics: https://github.com/zvrba/SortingNetworks
-
i made std::find using simd intrinsics
And now, for the fun of it, you can try with sorting. I've already done the hard work in C# (AVX2 intrinsics): https://github.com/zvrba/SortingNetworks
-
Show HN: Fast(er) Sorting with Sorting Networks
> I can't read C#
Not much different than C++...
> Do you generate the sorting network at compile time
No, except for power of two sizes up to 32. I experimented with run-time code generation (and compilation) for given sizes, but... the generated machine code has too long prologue and epilogue for that to be worth-while (though the sorting code itself is well optimized, as if directly compiled from source). That's also mentioned in "Benchmarks" section.
> What's your sorting network template?
See References.
> And probably related: how is vectorization used?
See the code. There's no template, the code is fully "dynamic" and adapts itself to array size. As for vectorization... it compares/swaps 8 ints/floats at once, with some swizzles to rearrange the elements. For sizes that are not power of 2, I use masked loads and stores and some extra logic for deciding which comparisons to skip. (I treat non-existing elements "as if" they were set to intmax or float infinity.)
This file https://github.com/zvrba/SortingNetworks/blob/master/Sorting... has it all.
> this week-end project
Sorry, can't read Rust. (Though it reminds me of days spent coding in Perl.) Most networks are not SIMD-friendly and the code as it's now is the 3rd iteration where I figured out how to best leverage SIMD to exploit the recursiveness and regularity in the network. (Not the least, no random memory accesses: only forward and backward loads and stores.)
Without SIMD, I don't think it'll be worth it, because network will also access the memory randomly (just as "standard" sort), and in addition it has worse algorithmic complexity.
-
Fast(er) sorting with sorting networks, part 2
So recently I posted a link with code for fast sorting of int arrays. People wondered how they'd perform for large arrays (1M elements), and I conjectured they'd be way slower because of their algorithmic complexity. Turns out I was wrong, they're 3-6x faster for arrays of length up to 1M elements. Updated code and benchmarks are now available at https://github.com/zvrba/SortingNetworks
-
Fast(er) sorting with sorting networks
The code (MIT license) is available here: https://github.com/zvrba/SortingNetworks
csharp-source-generators
- Any type providers implemented in C# using source generators
-
Custom intellisense error or warning feedback?
I don't know of anything out of the box that would emit errors/warnings for a case like that, but if it was something you were dealing with often enough you could certainly write your own analyzer if one doesn't already exist.
-
Embedded source generation?
List of source generators: https://github.com/amis92/csharp-source-generators
-
What are the hardest topics in C#/.NET you would like to know more/better?
I also couldn't find many info in docs nor more advanced tutorials, but this list of source generators helped me as an inspiration.
-
Why is no-one using Roslyn token-based code generation with Source Generators?
I'm planning to rewrite all of our company's old T4-based codegen tools into Source Generators. I've been looking at how other Source Generators are implemented and what surprised me is that everyone seems to assemble the output code manually as text with string builders or at best some simple templating engine (eg. Scriban). I expected that I would see a lot of projects assembling their output code from Roslyn tokens and then using Roslyn's formatter to produce the actual code that can be emitted into the output file(s), like this article demonstrates. No-one seem to be doing that though. Why?
-
Source generator library
Start from here: C# Source Generators
-
Getting into source generators in .Net
Look here under 'Tips & Tricks'
-
The C# Source Generators revolution
Source generators colletion
-
HttpClientGenerator is a tool that uses the Roslyn code generator feature to write boilerplate HttpClient code for you.
Add it to this list https://github.com/amis92/csharp-source-generators
What are some alternatives?
static-sort - compile-time sorting networks in rust
Roslyn - The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.
std_find_simd - std::find simd version
dotnet - .NET Community Toolkit is a collection of helpers and APIs that work for all .NET developers and are agnostic of any specific UI platform. The toolkit is maintained and published by Microsoft, and part of the .NET Foundation.
ikos - Static analyzer for C/C++ based on the theory of Abstract Interpretation.
ResXFileCodeGenerator - VocaDb.ResXFileCodeGenerator is a C# source generator to generate strongly-typed resource classes for looking up localized strings.
pypy - The unofficial GitHub mirror of PyPy (mirrored via https://github.com/mozillazg/job-mirror-hg-repos)
stronginject - compile time dependency injection for .NET
ASP.NET Core - ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.
NullGuard - Adds null argument checks to an assembly
JDK - JDK main-line development https://openjdk.org/projects/jdk
HttpClientCodeGenerator - HttpClientGenerator is a tool that uses the Roslyn code generator feature to write boilerplate HttpClient code for you.