2024-01-01から1年間の記事一覧

カットがなくて第二不完全性定理が成り立たない体系

カットなしの二階算術は、自身の無矛盾性を示せる体系です。 つまり、第二不完全性定理が成り立たないわけですが、どういう仕組みになっているか、詳しく書きたいと思います。 元ネタ:自分自身の無矛盾性が証明できる強い自然数の理論体系 – Depressive Dia…

C/C++コンパイラが行う浮動小数点型の式の短縮の傾向と対策

C言語やC++では、コンパイラが気を利かせてFMA命令にコンパイルすることがあります。 具体的には、次のように書いた場合、浮動小数点数乗算命令と浮動小数点数加算命令が使われるのではなく、浮動小数点数融合積和演算命令(以下FMA命令)が使われることがあ…

浮動小数点数演算器のつくりかた(その1)

最近浮動小数点数演算器を作っているので、作るときのポイントを忘れないようにメモしておきたいと思います。 以下の全4回で書いていく予定です。 最近接丸めの浮動小数点数加算器の作り方(今回) 最近接丸めの浮動小数点数乗算器の作り方 RISC-Vの規格に従…

MN-Core 2のアセンブリ言語でFizzBuzzを書いてゴルフした

FizzBuzz - MN-Core Challenge というコードゴルフに挑戦した記録です。 スコアはぴったり100になりました。 ただのFizzBuzzですが、SIMDプロセッサであるMN-Coreでこの手の処理をするのはかなり面倒です。 以下、順を追って説明していきます。 最初に作った…

行列乗算の最適化入門(コンシューマー向けGPU編)

コンシューマー向けGPUは、倍精度演算性能こそ高くないものの、単精度でよければ驚異的な演算性能を持っています。 例えば、NVIDIA社のGeForce RTX 4090は、カタログスペックで82 TFLOPSもの性能があります。 カタログスペックに近い性能を出すことは困難で…

任意サイズ正方行列乗算の最適化(その1)

今まで3回にわたって、行列サイズがコンパイル時にわかる場合の正方行列乗算の最適化を取り扱ってきました(行列乗算の最適化入門 - よーる、行列乗算の最適化入門(マルチコア編) - よーる、行列乗算の最適化入門(GPGPU編) - よーる)。 行列サイズがコ…

行列乗算の最適化入門(GPGPU編)

前回の記事(行列乗算の最適化入門(マルチコア編) - よーる)では、CPU上でマルチスレッドの理論性能の89%以上(1.1 TFLOPS)を出せる簡単なコードを紹介しました。 今回はさらに高速化するため、GPGPUを使ってみます。 GPGPUとしては、前回セットアップし…

Ubuntu 24.04 LTSでTITAN Vを使えるようにした

この前Ubuntu 24.04 LTSがリリースされたので、これの上でTITAN VというGPUを動かせるようにしていきます。 TITAN V について TITAN Vは、2018年にNVIDIA社が発売した非常に高価なコンシューマー向けGPUです。 国内代理店の菱洋(りょうよう)エレクトロからの…

行列乗算の最適化入門(マルチコア編)

前回の記事(行列乗算の最適化入門 - よーる)では、L3キャッシュに乗りきる程度のサイズ(だいたい1000×1000くらい)の行列積について、シングルスレッドの理論性能の84%以上を出すことができるコードを紹介しました。 4000×4000くらいのもう少し大きな行列…

Yosysを使ってみる(その2)

以前の記事(Yosysを使ってみる(その1) - よーる)でYosysというオープンソースの論理合成ツールを紹介しました。 今回は、乗算器を複数の作り方で作ってみて、その回路面積を比較してみようと思います。 全加算器セルのような複数出力のセルを使いたいの…

行列乗算の最適化入門

そんなに大きくない行列乗算をそこそこの速度にする必要が生じたので、そのメモです。 L3キャッシュに乗るくらいのサイズの行列乗算において、シングルスレッドの理論性能の80%以上を出すことができました。 実験環境 Intel Core i9 12900Kを用いました。 共…

64bit乗算の上位部分の計算

x86やRISC-Vなどの多くの機械語命令セットには、64ビット整数同士の積(128ビット整数になる)の上位64ビットを求める命令が存在します。 しかし、C言語やC++の言語標準には128ビット整数が存在しないため、これを簡単に得ることができません。 gccなどのコ…

素数を数えるアルゴリズムの理解

与えられた整数に対し、以下の素数の数を数えるアルゴリズムを理解します。 Library Checkerで高速な実装を調べてみると、提出107115が最速ですが、このソースコードは未定義動作を含んでいます(ランキング上位を見てみると、62015, 107115, 147826, 150290…

MN-Core 2の機械語ゴルフに入門する

今週の水曜日にMN-Core勉強会があり、そこでMN-Core 2のエミュレータが公開されたようです。 そこで、MN-Core 2の機械語(アセンブリ言語がvsmと呼ばれているらしい?)のコードゴルフをやってみます。 MN-Core 2の機械語なんて書いたことないので、丁寧に勉…

60bit整数を高速に素因数分解する

Library CheckerのFactorizeという問題でfastestを取ったので、そのコードの解説です(速度ランキング)。 Factorizeは、までの整数が高々100個与えられ、それらを素因数分解せよ、という問題です。 概要 上位陣(13ms~15ms)の解法では、ECM(楕円曲線を用…

Unityのgit管理をWSL2でやる

最近久しぶりにUnityでゲーム作りをしています。 共同で開発するためにgitを使うのですが、gitコマンドをWSL2から使用するといまいちな感じになったので、何とかする方法のメモです。 プロジェクトはWSL2の外に作る UnityプロジェクトをWSL2の中(/home/lpha…

なぜドルコスト平均法しないほうがいいか

新年になりました。 タイトルに関してですが、なんだか話があったので軽くまとめておきます。 要点としては、 投資の期待値が標準偏差に比して大きい(インデクスファンドなどはこの条件を満たす)投資商品がある場合、 余剰資金があるなら、 何も考えずにそ…