Skip to content

メモ

小ネタ集です。

BlenderでAlembicを出力した場合

  • 速度は出力されない
  • 剛体運動はXformSampleに記録される
  • ソフトボディの運動はXformSampleに記録されない
  • ソフトボディと剛体がある時、例え剛体であっても各フレームごとのポリゴンメッシュの情報(点、法線、面)が出力される。

Thrust

  • oneTBBをデバイスとして使う場合、コンパイルオプション-expt-extended-lambdaをnvccに渡してもラムダ式をデバイスコードで使うことはできない。
  • 入れ子になったhost_vectordevice_vectorはお互いにコピーできない(コンパイルエラーになる)。

C++

  • C++標準async+futureとスレッドプールの性能比較
  • ユーザー定義とdefault宣言で定義されたコピーコンストラクタをマクロで切り替えることはできない。
  • struct A final {}は合法。
  • ラムダ関数は静的な変数を自動的にキャプチャする。
  • 以下のような再帰的な構造体は合法。
    template <int D>
    struct A
    {
        static_assert(D > 1);
    
        double d;
        A<D-1> a;
    };
    
    template <>
    struct A<1>
    {
        int d;
    };
    
  • テンプレートクラスの静的なメンバ定数はinlineにすると明示的に実体を定義せずに済む。
  • メンバ変数にconstを付けるとdefault宣言されたムーブ代入演算子が削除される。

Boost

  • Boost.TestをCMakeのfind_packageで見つけたい時は、componentsunit_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を見ると、ライブラリ毎のオプションがどういう風に使われているかわかるので、ここを見ることをお勧めする。

参考

  1. Thrust 1.9.4 リリースノート
  2. Predefined Node Types (oneTBB Documentation)
  3. Undo git fast forward merge
  4. テンプレート変数がラムダ関数にキャプチャされることによるエラーの例
  5. 再帰的な構造体の例