午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

処理速度

WPF、画像の拡大処理を高速化してみた、Parallel.Forとセパラブルで最大22倍速、バイキュービック、グレースケール専用

昨日のバイキュービックでの画像拡大処理を高速化してみた 結果はParallel.Forでの処理の並列化+縦横の処理を別々にするセパラブルフィルタっていう方法で最大22倍速までになった 画像拡大処理の高速化 Test1、Parallel.Forを使って処理を並列化 Test2、4x4…

C#.NET CoreでSIMDを使ってドット積、byte型配列ならMultiplyAddAdjacentが速かった

値は全て255の要素数1千万のbyte型配列、これのドット積を求めるのに色々試してみた SIMDを使わない普通の掛け算と足し算 System.NumericsでSIMD Dot System.Runtime.IntrinsicsでSIMD AVX Multiply + Add SSE2 MultiplyAddAdjacent FMA MultiplyAdd SSE41 D…

C#SIMDで合計値、byte型配列をIntrinsicsとNumericsのAddで合計値の処理速度

IntrinsicsとNumericsのAddでbyte型配列の合計値を計算 使ったアプリは AVX2をサポートしていないCPUだと動かないかも? Intel CPUだとHaswellコアから対応なので第4世代、2013年以降 AMD CPUだとZenコアから対応なので、Ryzen全部とAthlonでもZenコアなら対…

byte型配列から最小値と最大値、CPUのSIMDを使うクラスIntrinsicsとNumericsどちらが速いのか

CPUのSIMDを使うクラスIntrinsicsとNumerics、どちらが速いのかを、要素数1千万のbyte型配列から最小値と最大値を求める時間で比較してみた 今回の方法では結果は差が出なかった。シングルスレッド、マルチスレッドともに同じ速さ。Intrinsicsはポインタを使…

C#でSIMDを使うSystem.Runtime.Intrinsicsを試してみた、byte型配列の合計

SIMDを使っての計算はSystem.Numerics.Vectorクラスと、これとは別にSystem.Runtime.Intrinsicsってのもあるみたいで試してみた 環境 CPU AMD Ryzen 5 2400G(4コア8スレッド) MEM DDR4-2666 Window 10 Home 64bit Visual Studio 2019 Community .NET Core 3.…

C#.NETで分散を求めるマルチスレッド編

前回、シングルスレッド編 gogowaten.hatenablog.com これの続き いろいろ試して一番早かったのはこれ //分散 private double Variance(byte[] ary) { var myBag = new ConcurrentBag<long>(); Parallel.ForEach( Partitioner.Create(0, ary.Length, ary.Length / </long>…

C#.NETで分散を求める2回め、System.Numerics.Vector.Dotも使ってみたけど…

今回の記事は前回の gogowaten.hatenablog.com ↑この記事を書き直したもので 直した理由は速度比較をしていたんだけど、Math.Powの使い所が間違っていて、速度比較になっていないことが記事を書いた6日後に gogowaten.hatenablog.com わかったから、なので前…

C#.NETのMathPowは速くない?べき乗計算は掛け算を繰り返したほうが速い場合もあった

Math.Powを使うと遅くなる状況がある アプリダウンロード先とコードはギットハブ アプリファイル名:20200217_MathPow.zip github.com アプリ作成と計測環境 CPU AMD Ryzen 5 2400G(4コア8スレッド) MEM DDR4-2666 Window 10 Home 64bit Visual Studio 2019 …

ドット積を求めるSystem.Numerics.VectorのDotメソッドを使って分散を求めてみた

2020/02/19追記ここから 処理時間の基準にしたTest01でMathPowの使い方に問題があることが6日後の gogowaten.hatenablog.com ↑の記事でわかったので 書き直したのが ↓ gogowaten.hatenablog.com なのでここから↓はほとんど意味ない 2020/02/19追記ここまで …

本当は速いSystem.Numerics.Vector.Addを使って、int型配列の値合計2回め

前回、前々回でイマイチだったSystem.Numerics.Vector、本当は速かった int型配列の要素の合計の処理時間、シングルスレッド編 test19が今回追加したもの グラフにすると 普通のForループより2倍速くなった! マルチスレッド編 前回で速かったTest12~15より…

int型配列の合計値マルチスレッド編

前回は シングルスレッドだけでの計算だった 今回はマルチスレッド 1から100万1までの連番の合計を1000回求めるのにかかった時間 合計値の正解は500001500001 計測アプリ ボタンを押して待つだけ、test2とtest11だけは極端に遅い、test5とtest21はオーバーフ…

int型配列要素の合計値を求めるのにSystem.Numerics.VectorのAddを使ってみたけど

int型配列要素数100万の合計を100回求める処理時間測定 まとめ forかforeachが速い LINQは遅いけど今どきのCPUなら10億回の計算でも0.5秒で終わる VectorのAddはforより速いこともあるけど条件がめんどくさい 2020/02/11追記ここから gogowaten.hatenablog.c…

C#、配列から最大値を求めるMaxは、MathクラスよりSystem.Numerics.Vectorクラスのほうが速い

要素数1千万のint型配列(値はランダム)から、最大値を1000回求めた時の処理時間は、MathクラスよりVectorクラスのほうが2倍以上速い結果になった 青色グラフはシングルスレッド 赤色グラフは配列を分割してマルチスレッド 緑色グラフは1000回ループを分割し…

WPF、Parallel.Invoke、並列実行は昨日より速く

昨日の続き 目的は昨日と同じで画像処理を考えて、RGB順に並んだbyte型配列から、RGBそれぞれの配列を作成、それぞれの最小値、最大値、平均値(double型)を求める 結果 一番上が昨日、一番下が今回最速で 昨日より2倍くらい速くできた 今回のアプリのダウン…

LINQのMin、Max、Average使ってみたけど遅い、画像処理には向かない

LINQはとても便利だけど場合によっては遅い 今回試したのは画像処理で使うbyte型配列 ここからRGBそれぞれの配列と最低値、最大値、平均値を求めたい これらは減色処理で使う ピクセルフォーマットがRGBの場合はRGBの順番で並んでいる [R,G,B,R,G,B…] 変数名…

処理速度比較、画像の使用色数を数える、重複なしのリストのHashSetも速いけど配列+ifも速かった

ダウンロード先 github.com 画像の使用色数を数える 画像ファイルからのBitmapSourceからCopyPixelsして取得するbyte[]を使って 重複しない色の配列やリストを作って数える方法で処理速度比較してみた 条件 BitmapSourceのPixelFormatはPbgra32限定、アルフ…

エクセルVBAとC++とC#とVB、それぞれのバブルソートの処理時間

アプリやプログラム言語の違いで処理速度がどれだけ違うのかバブルソートを書いて試してみた エクセルのVBA Visual Studio Community 2017のC++ Visual Studio Community 2017のC# Visual Studio Community 2017のVB この4つで1万件のランダム数値配列をバブ…

エクセルVBAで、ソートアルゴリズムとデータの違いによるソート処理時間比較

前回まででいろいろなソートアルゴリズムをVBAで書くのは満足したので今回はそれらを使って計測 計測した環境は OS:Windows 10 Home 64bit エクセル:エクセル2007 CPU:AMD PhenomⅡ X3 720BE @3.0GHz OS以外は2007年から使い続けている10年前のパソコン 前…

エクセルVBAでクイックソート

クイックソート 基準値を配列の中から選んで基準値以上の値を配列の右へ、基準値以下は左へ寄せてから基準値の場所で配列を二分割、この処理を分割した配列それぞれで繰り返す 'vが配列、tは並び替える範囲の先頭の添字(index)、bは最後尾の添字 Sub QuickSo…

エクセルVBAでヒープソート

ついにヒープソートなんだけど、その前に選択ソート 選択ソート - Wikipediahttps://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%BD%E3%83%BC%E3%83%88 最小値を探し出して順番に並べるだけ 最初は配列全体から最小値を探す、見つかった値は配列の1番左…

エクセルVBAでマージソートその2、再帰処理の必要がないボトムアップ方式で速くなった

前回 gogowaten.hatenablog.com エクセルVBAでマージソートと再帰処理(再帰呼出し)...も難しいなあ ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ http://blogs.yahoo.co.jp/gogowaten/14807202.html 本当は速いはずのマージソートがシェルソートや…

エクセルVBAでマージソートと再帰処理(再帰呼出し)...も難しいなあ

マージソートMergeSort マージソート - Wikipediahttps://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%B8%E3%82%BD%E3%83%BC%E3%83%88 うーん、わからん マージソート | アルゴリズムとデータ構造 | Aizu Online Judgehttp://judge.u-aizu.ac.jp/online…

エクセルVBAでシェルソート

今回は挿入ソートの改良型のシェルソート シェルソート - Wikipediahttps://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88 挿入ソートでは常に隣と比較していたのを離れたところと比較してから、だんだん近くのものと比較…

エクセルVBAで挿入ソート

挿入ソート、InsertionSort 挿入ソート - Wikipediahttps://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88 今までのバブルソートからコムソートは交換して並べ替えていた 挿入ソートは名前の通り挿入して並べ替えていく 3,5,6って整…

エクセルVBAでコムソート

今回はコムソートCombSort 順番に gogowaten.hatenablog.com エクセルVBAでバブルソート ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ http://blogs.yahoo.co.jp/gogowaten/14787146.html ↓ gogowaten.hatenablog.com エクセルVBAでシェーカーソー…

エクセルVBAでシェーカーソート

前回のバブルソートからの続き gogowaten.hatenablog.com エクセルVBAでバブルソート ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ http://blogs.yahoo.co.jp/gogowaten/14787146.html シェーカーソート ja.wikipedia.org 基本はバブルソートと同…

条件分岐最適化、処理時間の計測 Visual Basic編

エクセルVBAに続いて Visual Basicでも試してみた CPUはPhenomⅡX3 720B 結果 いまどきの条件分岐のほうが早い結果が出た! エクセルVBAとは違う結果になった Select Caseでもいまどきの方が早い! エクセルVBAの結果は↓の記事 gogowaten.hatenablog.com 条件…

条件分岐最適化、処理時間の計測

条件分岐最適化 www.initialt.org/takehiro-switch-case.PDF http://www.initialt.org/takehiro-switch-case.PDF この記事を読んでエクセルVBAでも試してみた xが0、1、2、3のどれかのとき 3のとき 2のとき 0か1のとき で条件分岐させるときに If x = 3 Then…