マニュアル全体を検索してきましたが、Instruction Pointer について言及しているものは 1 つも見つかりません。私が書いている SPU プログラムにはこれが必要です。もしかして名前が違う?実行する命令のアドレスにアクセスする方法を誰か教えてもらえますか? よろしくお願いします。更新: プログラム カウンターと呼ばれているようですが、SPU プログラム内からアクセスするにはどうすればよいですか?
2 に答える
命令ポインターを取得したいだけの場合は、アセンブリで実行できます。
brsl r<n>, .+4
これにより、次の命令のアドレスがレジスタにロードされr<n>
ます。
spe_context_run
操作を実行することで次の命令を取得できるようです。
int spe_context_run(spe_context_ptr_t spe, unsigned int *entry, unsigned int runflags, void *argp, void *envp, spe_stop_info_t *stopinfo)
entry
入力: SPE プログラムの実行を開始するエントリ ポイント、つまり SPU 命令ポインタの初期値。entry の値が SPE_DEFAULT_ENTRY の場合、ロードされた SPE イメージから SPU メインプログラムのエントリポイントが取得されます。これは通常、初期化関数 crt0 のローカル ストア アドレスです (Cell Broadband Engine Programming Handbook、Objects、Executables、および SPE Loading を参照)。
出力: SPU が実行を停止した瞬間の SPU 命令ポインター、つまり、次に実行されるはずだった命令のローカルストアアドレス。
このパラメーターを使用すると、たとえば、SPE プログラムが「一時停止」し、I/O 操作の実行など、PPE スレッドから何らかのアクションを要求できるようになります。この PPE 側のアクションが完了したら、エントリを変更せずに、spe_context_run を再度呼び出して SPE プログラムを続行できます。