2020年12月28日月曜日

C-Reduceを使ってみたよ 2

C-Reduceを使って、これでデバッグが捗る!!と思ったわけですが、甘かったのです。

$ ls -l test.cc*
-rw-r--r-- 1 jam jam 134 Dec 27 09:23 test.cc
-rw-r--r-- 1 jam jam 13892 Dec 27 09:02 test.cc.orig
$ clang -O3 -fvectorize ... -S -emit-llvm test.cc
$ ls -l test.ll
-rw-r--r-- 1 jam jam 1031219 Dec 27 09:55 test.ll

orz... ヘッダファイルのre.hはデカかった・・・。

なので、一度cppで展開してから、もう一度C-Reduceを掛けます。

$ clang ... test.cc -E -o test2.cc
$ creduce test2.sh test2.cc
...
$ ls -l test2.cc*
-rw-r--r-- 1 jam jam 1180 Dec 27 10:41 test2.cc
-rw-r--r-- 1 jam jam 2350864 Dec 27 10:19 test2.cc.orig
$ clang -O3 -fvectorize ... -S -emit-llvm test2.cc
$ ls -l test2.ll
-rw-r--r-- 1 jam jam 8500 Dec 27 11:04 test2.ll
$ wc test2.ll
136 981 8500 test2.ll

よしよし、大分いい感じに。最初から`-E`で展開してから作業すべきでしたね。

2020年12月27日日曜日

C-Reduceを使ってみたよ

以前から気になってた、C-Reduceを、ついに使ってみました!

Cコードを破壊的に削っていくプログラムなのですが、コンパイラのバグが出たコードを、問題の箇所だけに削るのに便利なプログラムです。

案に違わず、なんでこれまで使ってなかったんだ、俺の馬鹿馬鹿!みたいな結果でした。まずは分かりやすく結果から。

$ ls -l test.cc
-rw-r--r-- 1 jam jam 13892 Dec 27 09:02 test.cc
$ creduce test.sh test.cc
...
#include "re.h"
namespace benchmark {
void a(std::string b) {
std::string d;
Regex c;
c.Init(b, &d);
}
} // namespace benchmark

え、そんだけ!?!?そんなに削ってくれるの!?

関数単位で削ってくれるだけかな?とか思ってたんですが、関数内のコードもガンガン削って、変数名なども適当に付け替えてくれて、超有能です!!

作るテストスクリプトは以下みたいな感じ。検出したい、エラーが出るパターンに!を付けます。!パターンだけだと、削り過ぎてsyntax errorが出るようになった時にcompile errorとsyntax errorが区別できなくなるので、コンパイルできて(syntax errorじゃなくて)、かつ最適化するとエラーになる物を検出としています。

$ cat test.sh
#!/bin/bash
clang -O3 -fno-vectorize ... &&\
! clang -O3 -fvectorize ...

いやあ、超便利!有能!なんで俺はこれまで使ってこなかったんだ・・・!!

2020年11月14日土曜日

Ryzen 7 5800Xデビュー

遂にまたデスクトップPC買いました!

しばらくMacbookで開発してたんですが、再々Macbookに爆音上げさせてるのが気になってて、PC買いました。ちょうど先日出たばっかのRyzen 7 5800Xにしました。サイコムさんとこで水冷のBTO売ってたのでそれで適当に作って貰いました

$ cd build
$ time ninja -j8
[4319/4319] Generating ../../bin/llvm-readelf

real 18m51.953s
user 146m27.064s
sys 4m38.495s
$

Civilization 6やりながらコンパイルできて幸せです。





全力で実行すると以下くらいに向上しました。

[4324/4324] Generating ../../bin/llvm-readelf

real 13m17.512s
user 199m5.145s
sys 6m25.026s

Macbook proの頃は、全力で30分くらい掛かってたので幸せになれたかな

2020年9月5日土曜日

Macbookでnarou.rb

Macbookでnarou.rb他一式を動かしてみる話です。

dockerからnarou.rbを動かしているのだけど、最近AozoraEpub3を改造版にして画像も表示できるようになって満足していた。これまでは私家版AozoraEpub3でpngしか出せなかったからね。

しかし、今度はjpgが大きすぎ、epubサイズが25Mを超えて、google mail経由で転送できなくなってしまった。利用しているnarou.rbは、jpgなどをDLして用意してそれをAozoraEpub3に流し込んでいるので、そこで画像サイズを変えれないかなと相談してみた。結論から言うと、AozoraEpub3で対応して欲しいと。最近改造版AozoraEpub3ではそういった画像周りの改善をしているし、それもそうかなと、AozoraEpub3を直接使ってみることにした。

しかし、AozoraEpub3は実行するのにディスプレイが必要で、例えばDockerからだとX11サーバーに接続する必要がある。

X11サーバー周りの設定してもいいのだけど、一度、手持ちのMacbookで、narou.rbからAozoraEpub3まで一通り動かしてみるのもいいかと思ったので、今回はそれをやってみることにする。ついでにMacbookで一通りを実行する様子をまとめることにする。