シーメンスのノベルティ?のマルチツールみたいなやつ、ちょっと欲しい。ガスタービン発電機1機買ったら5個くらいついてくるのかな? (対地ミサイルじゃねーんだから。。。
ブランド物に弱いので、ロゴ入ったノベルティとか、すぐそういうのに惹かれちゃう。
***
Avx2を使ったバイト反転アルゴリズム、8bit単位のシャッフルを使うやり方が主流らしい。入れ替えを指示するのに32バイトが必要だけど、基本的に1回レジスタに入れておけば使い回せるので、大量のデータを並べ替えるときはメモリ帯域は使わなくて済むようだ。AVX2の8bit単位シャッフルは128bit境界があるので32バイト単位で並べ替えるには上下を入れ替える命令と組み合わせる必要があるけど。
***
CICの前段、複素数の加算だけど、構造体を使うのをやめて、long型で加算処理を実装。トータルで9分くらいかかる処理が5分ほどで終わった。かなり効く。structを演算子で処理すると引数のコピーやコンストラクタ呼び出しが多発するので、簡単な計算なら適当な多次元配列で持って自前で処理したほうが早くなる。
試しに、.NET Coreに移植してSIMD対応もやってみる。CICは2x longの和なのでSse2で可能。FIRは2x longの積が必要(DC周りだけなので複素数としての積は不要)だけど、longの積は2本(128bit)でもAVX-512が必要になるらしい。long→doubleの変換も512が必要。AVX2でもlongが4本並ぶから十分効果あるだろうに、long扱うような計算はなぜか未対応が多い。
C#のAVX-512対応も進んでるのかな? 第11世代CoreでAVX-512に対応したので、CPUの数ががある程度出ればいずれは対応するんだろうけど、ただでさえ半導体は逼迫してるし、Linux界隈からはディスられてるっぽいからなー。あの界隈ってサーバーとかワークステーションとかの需要もあるはずなのに、なんで計算量増やすのに反対してるんだ?
とりあえず、一部だけSIMD化して、処理時間3分45秒くらい。最初は9分くらいだったから、2.4倍くらい早くなった。とはいえ、SIMD使わないでも5分くらいで処理できていたことを考えると、正直微妙。もう少し真面目に実装すれば多少は早くなるんだろうけど。
プロファイラで見た感じ、ゴリゴリ最適化すれば2割位は削れそうな雰囲気はあるけど、凄まじくスープの絡みのいい縮れ麺になりそう。スープじゃなくてソースと考えれば……いや、ソースがごちゃごちゃしたスパゲッティコードか。。。ははーん、だからスパゲティと言われるのか。確かに「ラーメンのソース」は違和感あるけど「スパゲティのソース」は違和感ないもんな。
それはさておき、とりあえずSIMDで一定の高速化は達成できたし、もう少し早くなる見込みもあるので、.NET Core実装で進めてみよう。
***
PNGに偽装したZIP、なぜか開けるやつと開けないやつがある。もう少しマトモな表現をすると、中間ファイルとして出したPNGはZIPとして開くことができず、テストデータとして適当に作ったファイルは問題なく開ける。開くことができないZIPというのは、拡張子をZIPに変更して展開ソフトに入れると圧縮モードのダイアログが表示されて、展開ソフトからはZIPファイルとして認識されていない(=ZIPとして必要な情報が認識されない)、という状態。ただし、エクスプローラーで開くとファイルの一覧が表示されて、ファイルをダブルクリックすれば正常に表示できるし、一覧画面から「すべて展開」を実行すると、解凍が行える。
中間ファイルの中身、前半にPNG、後半にWAV、最後にJSONとZIP情報が入っていて、特にWAVは実質的には乱数列なので、もしかしたら偶然にZIPのマーカーみたいなデータが生成されて、展開ソフトの実装によってソレが誤認されて、しかし不正な情報なので圧縮データとして認識されない、みたいなことになってるのかも。実際、中間ファイルをバイナリエディタで開いてみると"PK"(50h 4Bh)はそれなりの頻度で出現するし。
そもそも、ZIPデコーダの実装って、後ろから探索するべきなのでは? そうじゃないと「ZIPを(無圧縮で)含むZIP」を正常に取り扱えないはずだし。ということで、この挙動は展開ソフトの実装の問題のような気がする。この展開ソフト、かなり昔から使っていたけど、実装はあんまりよくないのかもしれない。以前にも別のトラブルでだいぶ手こずったし。別の展開ソフトに乗り換えたほうがいいかも。
調べてみると、このソフト、すこしまえに配布が終了してるそうだ。最初に出たのが1990年代後半の、インターネット黎明期より少しあと、それなりの大きさのファイルを共有できるようになってきたけど圧縮ソフトがほしい、というような時代の、個人開発のもの。20年以上経っているんだから、開発してる人も下手すりゃいい年したおじさんだよなぁ。メンテナンスし続けろというのも酷な話か。結構使いやすくて気に入ってたんだけど。
シンプルで手軽に使える展開ソフト、なにかいいのあるかな。単純にZIP展開するだけならC#の数行程度のコンソールアプリで作れそうな気が若干。。。ちっちゃいツールだと探すより作るほうが楽だったりするからなぁ。少し機能追加したいとか欲出すとあっという間に破綻するけど。
***
3月12日受信分
* 27844 / CUTE-1
* 27848 / XI 4
* 28895 / XI 5
* 32791 / SEEDS
* 33493 / PRISM (HITOMI)
* 41460 / AAUSAT 4
* 42775 / AALTO 1
* 42790 / VZLUSAT 1
* 42792 / ROBUSTA 1B
* 43615 / CP-7 DAVE
* 43743 / REAKTOR HELLO WORLD
* 43933 / ORIGAMISAT-1
* 43937 / NEXUS
* 44330 / RAAVANA1
41460 / AAUSAT 4(01:40Iのパス)
普段は中央のピーク1本と両側の2本しか見えないけど、このパスは最接近1分前にかなり強い信号が受信できてる。強いと言っても、いつもと比べれば、程度だけど。
固定ビームなので基本的に確率的だけど、なんせ1日に100パス近くも受信してるので、CW程度なら十分に強く受信できることも多い。
27848 / XI 4 (17:51I)
42790 / VZLUSAT 1(20:14I)
こいつはいつも強いけど。
VZLUSAT1は強く受信できるし、40秒周期20%くらいの高頻度で出てるし、受信しがいのあるヤツ。レアリティは低いけど。
0 件のコメント:
コメントを投稿