half (binary16) のInf/NaN判定関数

CUDA Advent Calendar 2019 13日目の記事です.
half型のInf/NaN組み込み関数にないと自分の周りで話題になったので作ってみました.
アドベントカレンダーも折り返し地点ですがネタがないので小ネタです.
NaNでもInfでもどちらでもいいけれど判定を行いたい場合は自己等号判定を行うといいかと思います.

コード

half2float,float2halfはテスト用の関数で,halfのNaNをfloatに変換したりするとバグるので実用はしないでください(普通に__float2halfなどを使ってください).
NaNとInfの判定というのは基本的には指数部がAll 1かどうかを判定し,仮数部が0かいなかで分けます.
符号部もInfの場合は有効です.
bit演算のプロが書くともっと良くなるかもしれません.
もっともこのbit演算とfloatにキャストしてからの判定ではどちらが速いか怪しいですが.

カテゴリー:CUDA
記事作成日:2019-12-13