nvccのコンパイル時の一時ファイルを残す方法
消えたCUDA関連の旧ブログ記事を復元するひとり Advent Calendar 2024の記事です。
何の話か
PTXをinline assemblerで書いている場合など,nvcc (ptxas)でアセンブル時に
ptxas /tmp/tmpxft_00005f3d_00000000-5_main.ptx, line 76; fatal : Parsing error near '%r10': syntax errorのように一時ファイルのptxの行番号などが表示されることがありますが,nvccは終了時に一時ファイルを自動で消すためエラーの追跡ができません.
そこで一時ファイルを消さないようにするにはどうすればいいのかという話.
--keepオプション
nvccに--keepオプションを渡すと中間のファイルがCurrect directoryに展開され,かつ自動では消されません.
ptxas main.ptx, line 76; fatal : Parsing error near '%r10': syntax errorするとエラーメッセージもそのディレクトリのものとなりエラーを追えるようになります.
中間ファイルはptxやiiなどいくつかあり,Current directoryが散らかるのですが,これを避けるためには--keep-dirオプションで中間ファイルの置き場を指定してあげるといいようです.
nvcc main.cu -std=c++14 -arch=sm_75 --keep --keep-dir=tmp