ジェネリック特殊化ノウハウまとめ

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 最近お世話になる機会が増えてきたので忘れないようまとめておく。 以前自分で検証した内容も踏まえて。 手法選択フローチャート サンプルコード using System; using System.Runtime.CompilerSe…

NaNてことだ SIMD化したら結果が変わるなんて

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 処理をSIMD化してたらまれに計算結果が一致しないケースがあったので調査した。 注:SIMD化はあくまでこの問題を発見したきっかけであり、本稿のテーマとはさほど関係ありません。 結論 公式規格…

C#にも多次元配列ライブラリが欲しかった、改め作りたかった

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 pythonにはnumpyという、数値計算と多次元配列を提供するライブラリがあります。 こいつがあったからこそpythonはデータサイエンスの中心的言語になったと言っても過言でないほどよくできており…

パフォーマンスを本気で気にするLINQプログラマのためのオペーレータ表

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 標準ライブラリのLINQオペレータにはパフォーマンス向上のための様々なトリックが仕込まれている。 実装をざっと調べたので、その成果をここにまとめておく。 調査対象は.Net Core 2.。 オーダー…

最速のジェネリック特殊化を目指して

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 最近ジェネリックプログラミングをする機会が増えているのですが、C++のテンプレート特殊化のように型ごとの最適実装を書きたいと思うことがしばしばあります。C#のジェネリックでも型チェックを…

Span<T>を使うべき5つの理由

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 C# 7.2からSpan構造体というのが使えるようになって、こいつが結構すごいやつなんだが、いかんせん日本語記事が少ない。なら自分で書いて広めるしかないんじゃい!ということで、なんとなくでも…

メソッド分割してインライン化を効かせようという話

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 ことのあらまし 『System.Lazyはスレッドセーフのためにどれほどコストを払っているのか?』ということを疑問に思い、ベンチマークを取ってみることにしたときのこと。以下のような2つのLazySlim…

LINQでBufferをやってみる話

NOTE: こちらは以前Qiitaに投稿した記事のバックアップです。 IEnumerable<T>を指定件数で分割するという記事が何件か投稿されてたので自分でもやってみよう!という話 RxのBuffer使えばいいじゃん?と言うのはナシ。中身は参照してるけども。 記事の内容に誤り</t>…