ブログ 2016/12/27 小ネタ 並列化 よく目にする話題だと思いますが、ここ10数年くらい、CPUの性能は高クロック動作化ではなく、並列化によって向上しています。 CPU律速になるような計算処理は、ガチガチに最適化するなら並列処理を考える必要が出てきます。 並列化によって高速化しやすい計算の例として、浮動小数点数のデータ列の積和演算を考えてみます。 例えば、以下のようなコードになります。 private static float SingleThreadScalar(float[] x, float[] y) { … 続きを読む 2016/12/26 小ネタ 小さなオブジェクトのスタック割り当て 今回は、C#や.NETの現在ある機能でも、近い将来入りそうな機能でもないんですが、ちょっとした最適化の話。小ネタというか、いつものピックアップRoslynの亜種というか。「Javaでやってるんだし.NETでも」的な要望にし対して、.NETでは事情が変わるよ、というネタ紹介。 小さくて、かつ、短い期間使われないオブジェクトは、たとえ参照型(通常はヒープ上にメモリ確保)であってもスタック上にメモリ確保してはどうかという案があったりします。 CLR/JIT should optimize &q… 続きを読む 2016/12/25 C# 7思い出話 discards 書いた。 変数宣言式 ということで、今日も「小ネタ」休みで「C#7思い出話」の方を書くことにします。 このページのタイトル このページのタイトルはかなり悩んだ… 実質的にはdiscards(_を使った値の破棄)の話なんですけども。 discards単体だと入れる場所に悩み。 discardsを書ける場所はどこかと考えたら、「変数宣言する場所」なんですよね。 で、「将来的には変数宣言式になるはずだし…」とか、 「というかむしろ、先にアイディアがあったのは変数宣言式で、それ… 続きを読む 2016/12/24 小ネタ Concurrent コレクション .NET 4以来、System.Collections.Concurrent以下に、 Concurrentなコレクションがいくつか追加されました。 Concurrent、英単語の意味としては「同時に起こる」という意味の形容詞。 プログラミングにおいては、「複数のプログラムやスレッドから同時にアクセスされる」という意味で使われ、 「並行」とか「同時実行」とか訳されます。 たいてい、「Concurrentなんとか」みたいな名前のものは「同時実行があっても問題が起きない」という意味になります… 続きを読む 2016/12/23 小ネタ C# と他の言語との差というと C#で、「他の言語との差というと」とか「他の言語から来たばかりの人が書きがちなコード」みたいなことを聞かれた場合、まず何が思い浮かぶでしょう。 C#に馴れちゃってる人だと、LINQとかasync/awaitとかの機能が最初に浮かんだりします。でも、この辺りは「大きな機能」過ぎて、知ってるか知らないかの二択、1度知れば検索してすぐに解説が出てくる類で、かえって問題にならないという印象。 案外、困るのはもうちょっと細かい部分じゃないかと思います。 みたいなのが今日の話題。 辞書(ハッシュテー… 続きを読む 新しい投稿へ 過去の投稿へ
2016/12/27 小ネタ 並列化 よく目にする話題だと思いますが、ここ10数年くらい、CPUの性能は高クロック動作化ではなく、並列化によって向上しています。 CPU律速になるような計算処理は、ガチガチに最適化するなら並列処理を考える必要が出てきます。 並列化によって高速化しやすい計算の例として、浮動小数点数のデータ列の積和演算を考えてみます。 例えば、以下のようなコードになります。 private static float SingleThreadScalar(float[] x, float[] y) { … 続きを読む
2016/12/26 小ネタ 小さなオブジェクトのスタック割り当て 今回は、C#や.NETの現在ある機能でも、近い将来入りそうな機能でもないんですが、ちょっとした最適化の話。小ネタというか、いつものピックアップRoslynの亜種というか。「Javaでやってるんだし.NETでも」的な要望にし対して、.NETでは事情が変わるよ、というネタ紹介。 小さくて、かつ、短い期間使われないオブジェクトは、たとえ参照型(通常はヒープ上にメモリ確保)であってもスタック上にメモリ確保してはどうかという案があったりします。 CLR/JIT should optimize &q… 続きを読む
2016/12/25 C# 7思い出話 discards 書いた。 変数宣言式 ということで、今日も「小ネタ」休みで「C#7思い出話」の方を書くことにします。 このページのタイトル このページのタイトルはかなり悩んだ… 実質的にはdiscards(_を使った値の破棄)の話なんですけども。 discards単体だと入れる場所に悩み。 discardsを書ける場所はどこかと考えたら、「変数宣言する場所」なんですよね。 で、「将来的には変数宣言式になるはずだし…」とか、 「というかむしろ、先にアイディアがあったのは変数宣言式で、それ… 続きを読む
2016/12/24 小ネタ Concurrent コレクション .NET 4以来、System.Collections.Concurrent以下に、 Concurrentなコレクションがいくつか追加されました。 Concurrent、英単語の意味としては「同時に起こる」という意味の形容詞。 プログラミングにおいては、「複数のプログラムやスレッドから同時にアクセスされる」という意味で使われ、 「並行」とか「同時実行」とか訳されます。 たいてい、「Concurrentなんとか」みたいな名前のものは「同時実行があっても問題が起きない」という意味になります… 続きを読む
2016/12/23 小ネタ C# と他の言語との差というと C#で、「他の言語との差というと」とか「他の言語から来たばかりの人が書きがちなコード」みたいなことを聞かれた場合、まず何が思い浮かぶでしょう。 C#に馴れちゃってる人だと、LINQとかasync/awaitとかの機能が最初に浮かんだりします。でも、この辺りは「大きな機能」過ぎて、知ってるか知らないかの二択、1度知れば検索してすぐに解説が出てくる類で、かえって問題にならないという印象。 案外、困るのはもうちょっと細かい部分じゃないかと思います。 みたいなのが今日の話題。 辞書(ハッシュテー… 続きを読む