言語処理系

formalized-egison -- Egisonの型安全性の証明に向けて

概要 Egisonのパターンマッチの動作を定理証明支援系Coq上で定義し、「Egisonの処理系が項Mを値vに評価する」という命題をCoq上で表現できるようにしました。 動機 Egisonの中核的な機能はユーザが拡張可能なパターンマッチ機構です。例えば以下に示すように…

MNISTを可能な限り高速に分類する

概要 MNISTの分類をする学習済みモデルを軽量化し、 更にSIMD命令を使った高速化を行うことで、 onnxruntimeより高速なMNISTの分類が可能になりました。(シングルスレッドで) 前回までのあらすじ この記事は前回の続きです。 前回はMNISTを分類する学習済み…

WebAssemblyで自作言語用のGCを書く

前回の続きです。 概要 前回の記事ではWebAssemblyを出力するMLのサブセットコンパイラを作りました。しかし、WebAssemblyにはGabage Collection (GC) が未だに実装されていないため(2019/7/8時点)、メモリ管理は全て自分で行う必要があります。前回は超適当…

ONNXファイルから不要な枝を削ってMNISTの推論を高速化してみる

この記事の中のソースコードは全てhttps://github.com/akawashiro/sonnxにあります。 概要 ニューラルネットワークから要らなそうな枝を80%削除しても精度が変わらなかった ONNXの中身をいじるのが大変だった onnxruntimeには勝てなかった 背景 機械学習の学…

高階関数を基本的な関数の合成で作った関数でQuickCheckする

高階関数をQuickCheckでテストしてみる QuickCheckを知っていますか? QuickCheckと言うのはHaskellのデータ駆動型のテスト用ライブラリで テストしたい関数を指定するとその引数に合わせて適当なテストデータを生成してくれます。 では高階関数(関数を引数に…

WebAssemblyを出力するMinCamlコンパイラを実装しました

概要 WebAssemblyを出力するMinCamlコンパイラml2wasmをフルスクラッチで実装しました。 github.com マンデルブロ集合を計算するこんな↓感じのMinCamlのソースコードが マンデルブロ集合を出力するMinCamlソースコード こんな↓感じのWebAssemblyに変換されて…