OpenGL + CUDA interopのコードを読む

しばらく前に、CUDAを使ってGPU上に作ったデータをそのままGPU上でpixelの配列にしてそのまま画面に描画しようとしていた。 cuda_practice/ising-show at master · ToruNiina/cuda_practice · GitHub 例えばこれなのだが。これは、isingモデルをシミュレーシ…

メモ:cerealと派生クラス2

C++

cerealで継承を使ったサンプルを少し前に掲載したが、これらのクラスがテンプレートだったらどうなるか。特に、継承関係を登録するマクロ。 この部分だ。 CEREAL_REGISTER_TYPE(sample::Derived) CEREAL_REGISTER_POLYMORPHIC_RELATION(sample::Base, sample…

メモ:cerealと派生クラス

メモです。cerealは説明不要のシリアライズ用ライブラリ。 派生クラスをstd::unique_ptr<Base>として持っている時の最小サンプル。 cereal::base_class<Base>(this)をシリアライズするのを忘れない CEREAL_REGISTER_TYPE(sample::Derived)を名前空間の外に書く。セミコロ</base></base>…

parallel linear BVH (LBVH) をCUDA+thrustで書いた

久々に少し非自明なことをCUDA+thrustでやった。大体動くようになるまでまる一日(半日+半日なので別のmetricsでは2日)かかった。 github.com BVHとはなんぞやという話は、以下の記事にとてもよくまとまっている。というか、多分この記事の著者は私のような…

toml11 v3.0.0リリース

毎回思うんだけどどういうタイミングでリリースタグ打てばいいのかよくわからない。皆どうしてるんだろう。 github.com 基本的に前回記事を書いた時からそんなに変わっていない。一応自分で使ってみて気になった細かなことがいくつかあるが(例えばカスタム…

toml11 v3ができてきた

以前「やりたいな〜」と書いた通りの変更をゴリっと入れてみた。まだマージしていないが、v3ブランチがpushされている。今まで通していたテストは全て通った。追加機能のテストも最低限は通った。しばらくテストの拡充をしてからベータ版を出すつもりでいる…

C++ if文再訪

C++

今回はC++規格書のif文周りを読んでみたい。 今更一体全体何なんだと思う人が大半だと思うが、普段息をするように使っているものだからこそ、規格書を読んでおくのは良いことだと思うのだ。普通の人が規格書を読むのは、知らないものについて勉強するときか…

記憶の中の場所

技術記事ではない。

Gitbookで生成したファイルがGitHub pagesに無視される

TL;DR: .nojekyllという名前の空ファイルをgithub pagesのルートに入れる タイトルの通りの現象が起きて困っていた。 解決策の拍子抜け感に比べて状況としては結構こんがらがっていたのだが、順に説明していこうと思う。 以前に書いた方法で、Gitbookを使っ…

小さなlisp処理系を作った

ふと、そういえばbrainfuckよりも高級な言語処理系を作ってない(太古の昔に作ろうとした滅茶苦茶なやつは除く)ことを思い出し、ちょっとlisp処理系でも作るか〜〜と思って実装した。連休だし、普段やってるプロジェクトしかやらずに過ぎていくのももったい…

toml11をバージョンアップした

しすぎじゃない? 変更点 まずは、C++17になっていたら文字列をstd::string_viewで受け取ったり、toml::valueをstd::string_viewで初期化できるようにした。どうやらC++17で使っている人がいたっぽいので、特に要求はなかったがあったほうがいいかなと思って…

fishでgitの補完が遅い場合は3.0にアップデートする

遅すぎた(間違えてtabを押すと数秒止まる)ので「fish completion slow」とかでぐぐってみたところ、「遅いよ」なるIssueが立っていた。 github.com このコメントで「3.0で速くしたよ」というコメントがあった。 Slow git auto-complete... how to turn off…

toml11を60倍高速化した話

toml11はしばらく前に開発して、最近も結構いじり続けており、それなりの数のユーザーがついてるっぽくて結構嬉しくなっているライブラリだ。そもそもが自分のために作ったものなので、自分の都合で結構改変することがある。これは、まあレポジトリのオーナ…

std::alignを動的メモリ確保と一緒に使う

C++

はい。C++17を使っている人はnewが全部やってくれるようになったので不要な話です。C++17以前のコードのため。 Introduction アライメントとは、ざっくり言うとメモリ上の位置調整であり、普段は気にしなくていい(コンパイラやmallocがちゃんとやってくれる…

smart pointerを使う場面

C++

なんか話題になっていたので、具体例を考えてみたい。 継承を使っているとき 通常、C++で継承は使わない。テンプレートの方がたいてい実行時性能がよいので、テンプレートを使うからである[要出典][独自研究]。 ライブラリの場合は普通ユーザーがコードを書…

順列都市 再々再読

注:ネタバレを避けようという気持ちは全くありません。むしろ根本的なアイデアを解説してさえいる 『順列都市』を最初に読んだのは確か中学三年生か高校一年生の頃で、当時は塵理論のアイデアを今にして思えば何一つ理解できていなかったし、主人公ダラムが…

CUDAでカーネル関数がスキップされる(ように見えた)

1ヶ月くらい、土日や夜の自由時間を主に使ってGPUを使ったレイトレを書いていた。この話もまとめたいな〜と思いながらダラダラしていたら1週間が経過してしまった。みんなどこから時間をひねり出しているんだ? 私以外の人々はその人生で一切ダラダラしない…

C++20 Contract

C++

そういえば最近はC++関連のことに触れていないなと思ったので、今日はまだ日本語の説明があんまりないように見えるContractでも取り上げてみたい。サーベイ不足だったら申し訳ない。提案に関する情報は、 P0542R3: Support for contract based programming i…

AIアシスタントの中身はどうなっているんだろうか

たまには下調べや引用などをせずに思ったことを適当に書き散らしてみたいと思う(いつもでは?)。なので、この記事には裏が取られた情報や5秒ググればわかることなどは書かれていない。すべて想像で書いている。 昨日Siriに少し話しかけており、ふとこいつ…

Rust Book 勉強会 #3 フォローアップ

Rust Book 勉強会で発表をしてきた。 rust-kansai.connpass.com これは、結構前にQiitaのC++アドベントカレンダーで書いた内容と、Ben Deane氏によるCppConでの発表"Using types effectively"が下敷きになっている。 www.youtube.com あ、この資料にクレジッ…

Rustで型推論を助けるトリック

Rust業界に詳しくないので既に広く知られているものかもしれないが、昨晩突如として以下のようなトリックを思いついた。 struct X<T> {/* fields omitted */} impl X<f32> { pub fn f32(self) -> Self {self} } impl X<f64> { pub fn f64(self) -> Self {self} } let x = </f64></f32></t>…

Rustでtraitのassociated typeに対してtrait boundaryを課す

RustのTraitは内部に型を持つことがある。関連型(associated type)だ trait Hoge { type Value; } impl Hoge for Piyo { type Value = Fuga; } このValue型についてトレイト境界を付けたい。 つまり、ある型Tがあり、型<T as Hoge>::ValueがOtherTraitを満たす場合の</t>…

Rustでgenericなenumを作る

パッと出てこなかったので。 例えば、位置か速度か力かわからないベクトルがあるとする。すると、Rustならenumにするだろう。 enum CoordKind { Position{x:f64, y:f64, z:f64}, Velocity{x:f64, y:f64, z:f64}, } let pos = CoordKind::Position{x: 1.0, y:…

GitBookでドキュメントを作りCircleCIでGitHub-pagesにpushする

今更感 github-pagesに直接何か生成して置くのもCircleCIを使うのも始めてでNode.jsを真面目に使うこともなかった人間がいきなりこれをやったらどうなるかの覚書 GitBookがクラウドサービスに注力してCLIの開発は基本的にやめるよとか言ってるタイミングで自…

2018年にしたこと

ブログ記事を書こうとして、年が変わって一発目だったことに気づき、総括的なことをするべきかどうか考えている。3月の年度末に今年度でやればいいのでは(引き伸ばし癖)という気持ちが芽生えているからだ。 実は、10月くらいに一度総括をしようとしていて…

RustとC++のジェネリクスの性格の差

今までRustは使いまわすことのない適当なスクリプト的にしか使ってこなかったので、実際のところ本質的に難しいことは何もしてこなかった。その間は非常に楽で、言われるほど難しくないのではと思っていた。が、最近コードを使いまわそうと思って書き始めた…

最強のC++実装TOMLパーサーが完成した

ここ1, 2週間費やしていた作業が完了し、めでたくtoml11のバージョン2.0.0をリリースした。 github.com このバージョンアップで、 コードが凄まじく美しくなり、 エラーメッセージが最強になり、 TOML v0.5.0 (最新) に対応した。 せっかくなのでこの記事で…

コードの汎用性と規模の相転移点

On the quality of academic software | Daniel Lemire's blog 同僚がSlackに貼り付けたこの記事に同意しすぎて気絶している。

脳を破壊するFortranコード

今日、後輩と色々試していて面白いことに気付いた。Fortranのキーワードは、予約語ではない。Fortranはdoとかifとかといったキーワードを持っているが、これらは予約語ではない。 ググると規格書のセクション番号込で情報が出てくる。 Keywords in Fortran W…

GitHubのシンタックスハイライトを直した話

GitHubは自動でシンタックスハイライトがされるが、言語仕様が今も変わっていくような言語(大体の使われている言語はそうだ。Goのように意図的に固定している例外を除いて)ではたまにそれが古いままで、公式ページのハイライトがおかしいことがある。 TOML…