0

PTX は、最終的には個々のマイクロアーキテクチャの SASS アセンブリ言語に C/C++ GPU コードをコンパイルするための中間表現です。したがって、特定の nVIDIA GPU マイクロアーキテクチャの実際の命令セットにある特定の穴/ガフ/まぐれ/特異性によって妨げられることは想定されていません。

現在、PTX には、レジスタ内の先行ゼロの数をカウントするための命令がありますclz。それでもctz、後続ゼロの数をカウントする対応する命令がありません。これらの操作は「対称的」であり、特にその抽象的で特定のハードウェアで利用可能なものにバインドされていない場合、命令セットで両方が表示されるか、まったく表示されないことが確実に予想されます。一般的な CPU アーキテクチャには、長年にわたって両方がありました。

奇妙なことに、CUDAヘッダーdevice_functions.hは関数を宣言します

 * \brief Find the position of the least significant bit set to 1 in a 32 bit integer.
 *
 * [etc.]
 *
 * \return Returns a value between 0 and 32 inclusive representing the position of the first bit set.
 * - __ffs(0) returns 0.
 */
__DEVICE_FUNCTIONS_DECL__ __device_builtin__ int                    __ffs(int x);

この機能:

  • count-trailing-zeros とほぼ同じセマンティクスを持ちます - すべてゼロの入力のみが異なります。
  • 単一の PTX 命令に変換されるのではなく、ビットごとの否定clz.
  • 対応する可能性のあるものもありませ__flsん - 最後のセットを見つけてください。

それで、それはなぜですか?明らかな命令が PTX になく、ヘッダーに存在する命令とほぼ同じ「偽のビルトイン」が存在するのはなぜですか?

4

1 に答える 1