なぜか動かなくて2時間くらい溶かしたので備忘録。 まず、以下のようにfront matterにbookCollapseSection: trueを書いておくとそのセクションはメニュー上でFoldされる。 --- bookCollapseSection: true --- # TitleOfSectionThatShouldBeFolded これで動け…
人類はちょっと窮屈な言語があったらすぐLISPとかBrainfxxkを作る 前回の記事でC++20でテンプレート非型メタプログラミングが簡単にできるようになって嬉しいねという話をした。まあ実際には型に情報を埋め込んでいるのでこの呼び名はミスリードだが。 やろ…
C++での黒魔術といえばテンプレート型メタプログラミングだ。これは、テンプレートがパターンマッチと再帰を使えることを利用して、型レベルで計算を行う技術を指す。 template<int X> struct factorial { // 再帰的に展開できる static const int value = factorial<X-1></x-1></int>…
コーディングスタイルのことを考えるよりコードを書いたほうがいいということはわかっているのだが、コーディングスタイルのことは結構考えてしまう。恋か? 私は割とコーディングスタイルの好みが激しいのだが、自分がなぜそのやり方を好んでいるか、あるい…
今更すぎる。 自作の粗視化分子動力学エンジンのPRのチェック項目にTravisが表示されなくなっているのに気づいて、どうせならActionsでCI流すかと思って始めたのだがクッソもたついた。 何度かActionsは(C++, CMake, Boost.unit_testの組み合わせで)使った…
浮動小数点数を理解している人は比較的少ない[要出典]。だが基本的なアイデアは思うよりも難しくないはずだ。できるだけ短い説明をしたい。そこで、あなたが浮動小数点数を設計する人間になったと思い込んでほしい。すると気持ちが理解できる。ただ、簡潔さ…
こんな記事を書いたことがあった。 in-neuro.hatenablog.com これの誤差に関してもう少し掘り下げた記事を、英語と日本語の両方で書いてみた。 toruniina.github.io 英語はまだ拙いところが多いだろうが(クソ時間かかった)、まあここから飛ぶ人は日本語を…
variadic templateを関数の引数にすると最後までマッチしてしまうので関数の先頭に任意個の引数を取るような関数を書けない。困りますよね。 可変個の引数を先に渡して、最後に追加で何かを渡したい、そんなこともあると思います。 template<typename ... Ts, typename F> void f(Ts&& ...</typename>…
C++20 Conceptに少し慣れようと思い、練習がてら雑JSONを出力できるライブラリを書いてみようと思った。 C++20となると色々考えるべきことが増える(std::u8stringをどうするか? とか)が、今回はそのへんは主題ではないのでできるだけ今までのC++の範囲内…
ABC167と168に出た。両方4完でパフォーマンスはギリ水(1293)と緑(1091)。今回下がったのはCでWAしまくったからだろう。ロジックにミスが見当たらなかったので誤差の扱いが雑だったっぽい。まだどういうケースで落ちてたのか見つけられていない。提出したコー…
なんかそういうのがあったほうがいいのかなと思って作りました。多分数年前にもちょっとやろうとして放置していたと思う。 toruniina.github.io 将来への不安に苛まれてる時の方がこういうのをやったほうがいいのかなという気持ちになる。 一応Blog的にも使…
男もすなる競プロといふものを女もしてみむとてすなり(女ではない)。そもそも出場していないので「すなり」とか言ってるけど実際にはしてすらいない。 年明けに「今年はもう少し色々記事を書くぞ」とか言っときながら書類とセミナー発表とゲームと書類と書…
slurmはオープンソースのジョブスケジューラーだ。 これは何かというと、例えば、俺は今から1000種類の条件でシミュレーションを投げるぞ! ウオオ という時に、サーバーにログインして、シェルのfor文で1000個のバッチスクリプトを登録し、そのままログアウト…
別名ケツカンマ問題。 最後の要素の後にはカンマを入れてはいけない、という場合にどう対処するか。 要素のインデックスやイテレータを使ってループしているなら、普通にそれを見ればいい。 std::cout << "["; for(std::size_t i=0; i
template structの中にstaticなstd::mapを作ってmain()よりも前にアクセスしたらその時点ではまだコンストラクタが呼ばれておらず、中身がゼロ埋めされていてセグフォになった。 静的変数の初期化順序は基本的に書いた順、翻訳単位が違ったら実装定義、実装…
実は、std::vectorはC++17から不完全型をサポートしたので、std::variantと組み合わせると以下のようなコードが書ける。 struct config_t { std::variant<bool, int, double, std::string, std::vector<config_t>> data; }; これを上手く使えばJSONなどの木構造をかなり簡単に(ポインタを陽に触らずに)扱える。std</bool,>…
前回の続きです。 以下のコードを-O3でコンパイルすると、 pure function nth(v, n) result(out) implicit none integer, intent(in) :: v(:) integer, intent(in) :: n integer :: out out = v(n) return end function nth こんなアセンブリになって驚いた…
こういうツイートを見た。気になったので試してみたら本当にそうらしい。 x64でEAXに値を入れるとRAXの上位は(符号拡張ではなく)0になる。なのでC/C++で配列の添え字に32bit整数を使うと符号拡張命令が追加されて遅くなる。LP64環境で配列の添え字にintを使…
thrustがasync対応していたのを先月見つけた。 in-neuro.hatenablog.com ドキュメントがまるで書かれていないところをコードを読み進めて試していたのだが、そこで不可解な動作を発見した。 以下のようなコードを書いたとする。thrustの関数を非同期に読んで…
何が起きたのか TOML規格レポジトリにこの記事のタイトルの通りのアップデートがあった。 github.com 基本的に、toml11ではTOMLのmasterブランチに入った変更は TOML11_USE_UNRELEASED_FEATURES を define しないと有効にならないようにしている。だがこの手…
使えるみたいです。ただしOMP_NUM_THREADSを小さめの値、4とか、にしておかないといけないらしい。というのも、VMを動かしているハードのコア数(めちゃくちゃ多いんだと思う)を取得するからだそうで。CIに投げてる全員がそんな数のスレッドを立ち上げたら…
少し前、ちょっと面白い挙動に出くわしたので、順を追って説明しておこうと思った。知ってる人には当たり前のことが書かれているので下の方まで飛ばしてくれても構わない。 OpenMPはプラグマを書くだけでメモリ共有並列化ができるというやつで、手をつけやす…
CMakeの最新バージョン、3.16でtarget_precompile_headerがサポートされていた。ドキュメントは以下の通り。 cmake.org precompiled headerは、大規模なプロジェクトなどで変更がないのに様々な.cppファイルから何回もインクルードされるヘッダーファイルを…
以前こういう記事を書いた。 in-neuro.hatenablog.com まあNaNじゃないことを仮定しての高速化なんだからstd::isnan(x)を常にfalseだと思ってdead code eliminationするのは当たり前じゃんという気はするが、備忘録的に。 とはいえ、コンパイルオプションに-…
nvccはホスト(CPU)側のコードを生成するのはホスト用のコンパイラ(gccとか)に任せており、これは--compiler-binder <path>で指定できる。 以下nvcc --helpから抜粋。 --compiler-bindir <path> (-ccbin) Specify the directory in which the host compiler executabl</path></path>…
thrustというライブラリがある。 thrust.github.io 直接使ったことがなくても、CUDAをインストールしたら付いてくるので知らずにインストールしている人は多いと思う。 これはCUDAをC++で使う上で最高レベルに便利なライブラリで、もはやこれ無しでCUDAプロ…
多分細々したことをもうちょっとやってるけど忘れた。 書いてない部分で去年書き上げた論文のためのデータ集めとか研究用ソフトの開発とか解析とか先行研究調査とか論文執筆をしてる。一つは同僚と一緒に(co-1st)、一つは一人で。開発を研究の隙間でやってい…
だいぶ前(前の冬なので半年以上前)に、Ray tracing in one weekendを読みながらRustでレイトレを実装していたのだが、そこでrsqrtを使ったら画像が変になったのを思い出した。理由は今も(ちゃんと調べていないので)よくわかっていないが、とりあえず思い…
起きたこと TOML v0.5.0までは、配列に異なる型の要素を混ぜるのは許可されていなかった。 array = [1, 2, 3] # OK invalid1 = [1, "foo", 2019-11-08] # error invalid2 = [1, 2, 3.14, 4, 5] # error が、混ぜたいという人がかなり多く、ずっと議論が続い…
しばらく前だが、アップデートした。最新バージョンはv3.1.0だ。 Added TOML11_USE_UNRELEASED_TOML_FEATURES TOML言語仕様はまだちょいちょいバージョンアップされている。なので「TOMLとしてリリースされていないがtoml-lang/toml:masterにmergeされた、お…