てがみ: qatacri at protonmail.com | 統計 | 2022

202228300

202228200 これ、例として挙げたコードは明確に aliasing rule を破っているけれど、実際は次のような感じの、 GPU に渡すパックされたデータを作るコードだった。

char* buf = foo.mapBuffer();
*reinterpret_cast<float*>(buf) = 0.0;
buf += sizeof float;
*reinterpret_cast<uint16_t*>(buf) = 0;
buf += sizeof uint16_t;
...
foo.unmapBuffer();

あまり行儀のいいコードではないとはいえ、 aliasing rule を破ってはいない気がする。仕様上は GPU ライブラリ側がどう読むかに依存するだろうけれど、実際には GPU ライブラリ側と関数間最適化が行われる可能性はない。保守的なコードが生成されるはずである。これで壊れるのはおかしいような。 aliasing rule の理解が正しくないかもしれない。