掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Delphiで人工ニューラルネットワーク(Artificial Neural Network)のクラスを作りましたが遅いです (ID:150826)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
SSE並列化命令を使っても思った程早くならない場合次はキャッシュを意識したコードにしなければいけません。 たとえばFFTのような処理なら1層づつ回転変換を処理してゆくと、キャッシュサイズを超えるととたんに遅くなります その場合、キャッシュ内のデータが書きだされる前にそれを使う上層に使わせるという工夫が必要になります。 もちろんFFTはブロック同士が交差しますから上の層は下の層の半分しか処理できませんが 私のpcのキャッシュは3Mバイトですから 単精度なら複素数30万個あたりで分割する必要が出てきますね。 キャッシュサイズもCPUIDで調べる事が出来るので、高速化を考えるならそれを取得してやるという事になるでしょう。 その次の壁はメモリーサイズです。PCに内臓してるDRAMの範囲を超えると、これはもうどうしようもありません。 仮想記憶でHDDが使われるようになると、それがネックとなりSSEとかAVXとか無意味になってきます。 まあデータを8BITにしてバイトで保持してやれば1/4にはなります。 大昔、8BITで対数的に保持して掛け算 足し算はテーブル引きで処理した事はありますが まあそれでも、そこそこの結果が得られたように覚えています。 当時は掛け算さえ遅かった時代なので 速度面で使った手法であり。今では無意味ですが メモリ面では見直される手法かもしれませんね。 計算速度よりもメモリ消費量が速度を決める領域なれば有効でしょう。 学習さえ出来ればokで計算精度とか無意味な領域のように思えるので
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.