これが非常に古いスレッドであることは承知していますが、私の発見の一部を共有したいと思います。NVCC が生成する実行可能ファイルの一部をリバース エンジニアリングしました。そのため、正確性については確信が持てず、自己責任で使用してください。私は cuda 8.0 RC を使用しているので、他のバージョンで何か変更があったかどうかはわかりません。
__cuRegisterFatBinary はvoid *を入力として受け取ります。それは実行可能ファイルを指しており、私の例では次のようになりました。
B1 43 62 46 01 00 00 00 70 15 40 00 00 00 00 00 00 00 00 00 00 00 00 00
16 進数のシーケンスは次の形式に従います。
struct {
uint32_t magic; // Always 0x466243b1
uint32_t seq; // Sequence number of the cubin
uint64_t ptr; // The pointer to the real cubin
uint64_t data_ptr; // Some pointer related to the data segment
}
fatbinary.hしたがって、フィールド ptr のアドレスをたどると、cuda インクルード ディレクトリにある定義に従う実際のファット バイナリを見つけることができます。いくつかのヘッダー情報があります。次に出現する 0x7F + 'ELF' (エルフの魔法) を検索すると、cubin ファイルを抽出できます。