メモ¶
小ネタ集です。
BlenderでAlembicを出力した場合¶
- 速度は出力されない
- 剛体運動はXformSampleに記録される
- ソフトボディの運動はXformSampleに記録されない
- ソフトボディと剛体がある時、例え剛体であっても各フレームごとのポリゴンメッシュの情報(点、法線、面)が出力される。
Thrust¶
- oneTBBをデバイスとして使う場合、コンパイルオプション
-expt-extended-lambda
をnvccに渡してもラムダ式をデバイスコードで使うことはできない。 - 入れ子になった
host_vector
とdevice_vector
はお互いにコピーできない(コンパイルエラーになる)。
C++¶
- C++標準async+futureとスレッドプールの性能比較
- ユーザー定義とdefault宣言で定義されたコピーコンストラクタをマクロで切り替えることはできない。
struct A final {}
は合法。- ラムダ関数は静的な変数を自動的にキャプチャする。
- 以下のような再帰的な構造体は合法。
- テンプレートクラスの静的なメンバ定数は
inline
にすると明示的に実体を定義せずに済む。 - メンバ変数に
const
を付けるとdefault
宣言されたムーブ代入演算子が削除される。
Boost¶
- Boost.TestをCMakeの
find_package
で見つけたい時は、components
にunit_test_framework
を指定しないといけない。
Git¶
- git push --force-with-lease
git rm
でサブモジュールを消せる。- fast-forwardでのマージを取り消したい時は、
git reflog --keep (ブランチ名)@{番号}
とすれば良い。 - 最新のコミットしか要らないリポジトリをクローンしたい時、
--depth 1
をつければ良い。 - 追跡していないファイルを消したい時は
git clean
。 - 追跡しているファイルを全てステージングしたい時は
git add -u
。
PETc¶
PETScのC++の機能を使うには¶
PETScにはPetscCallThrow
という、エラーが発生するとstd::runtime_error
を投げる関数がある。
この関数はPETSC_CLANGUAGE_CXX
というマクロが定義されていないと使えない。
他にもC++用の関数があるかもしれないので定義することをお勧めする。
ちなみに、ヘッダーをインクルードする時はextern "C"
をつけない。
PETScのconfigureの実行オプション¶
公式サイトに用途に応じて使うオプションが示されているが、どんなオプションがあるのか示されていない。
どんなオプションがあるのか調べるための一番手っ取り早い方法は、CIのテストを見ることである。
地道な方法はソースコードを見ることだが、BuildSystem
があまりに複雑なので時間がかかるだろう。
個人的にはpackageを見ると、ライブラリ毎のオプションがどういう風に使われているかわかるので、ここを見ることをお勧めする。