私はこれが非常に古いスレッドだと知っていますが、私はいくつかの発見を共有したいと思います。 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
進のシーケンスがフォーマット
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
}
を次のあなたは、フィールドPTRのアドレスに従うのであれば、あなたはそのことができます定義に従う実際の脂肪のバイナリを見つけることができるようになりますあなたのcudaインクルードディレクトリのfatbinary.h
で見つけてください。いくつかのヘッダー情報があります。 0x7F + 'ELF'(elfの魔法)の次のオカレンスを検索すると、そこにあるcubinファイルを抽出することができます。
私はそれが直接呼び出されることを意味しないと理解します。しかし、私はまだしようとしている!あなたはfatcubinの記録構造を解読するのを助けることができますか?私は構造定義も持っています。しかし、コンパイラがどのようにしてこれらの関数を呼び出すために正確に何を行うのかを理解する必要があります – ash