opencl 的显示类型转换

转化函数的格式

destType convert_destType<_sat><roundingMode> (sourceType)
destTypen convert_destTypen<_sat><roundingMode> (sourceType)

notice :

  • 不支持bool, half, size_t, ptrdiff_t, intptr_t, uintptr_t, and void类型的转换。
  • 源和目的向量元素的个数要相同。

支持的数据类型:
char, uchar, short, ushort, int, uint, long, ulong, float, 以及内置的向量类型。默认的float转为整数使用的是_rtz,即舍去小数位。

round 模式

opencl中的round模式使用来将浮点转化为定点的操作,遵循IEEE754的round规则。

round模式

_rte:将小数位是5的转化为最靠近的偶数,其他情况按照四舍五入。例如convert_ushort(4.5) -> 4, convert_ushort(3.5) -> 4, convert_ushort(4.51) -> 5,
_rtz:向零转化。例如convert_ushort(4.5) -> 4
_rtp:向正无穷转化。例如convert_ushort(4.1) -> 5,同ceil函数。
_rtn:向负无穷转化。例如convert_ushort(4.9) -> 4,同floor函数。
默认情况下浮点转化为整数使用_rtz
例如下面两种转化都默认包含_rtz的使用。

int4   i = convert_int4( f );
int4   i2 = convert_int4_sat( f );

默认情况下整数转化为浮点数使用的是_rte

饱和转化

_sat将会把输入数据卡在目的数范围内(nan 将会转化为0),一般很少用于转化为浮点数的操作。
当没有指定_sat时将会使用截断的方式来赋值
例如convert_ushort(65537.33f)的结果是1。可以将其看作是进行两步计算,

  • 先把65537.33f按照__ctz转化为正整数65537,
  • 然后将65537按照truncate的方式转化为ushort类型,结果就是1了。

EXAMPLE

小范围转化为大范围uchar4-> int4

uchar4 u;
int4   c = convert_int4(u);

浮点转化为定点float -> int

float   f;
int    i = convert_int(f);

有符转化为无符号short4 -> ushort4 , 大范围转化为小范围short4 -> char4

short4  s;
// negative values clamped to 0
ushort4 u = convert_ushort4_sat( s );

// values > CHAR_MAX converted to CHAR_MAX
// values < CHAR_MIN converted to CHAR_MIN
char4 c = convert_char4_sat( s );

浮点向定点的转化

float4 f;

// 使用_rtz 和截断操作
int4   i = convert_int4( f );

// 使用_rtz和饱和操作
// values > INT_MAX clamp to INT_MAX, values < INT_MIN clamp
// to INT_MIN. NaN should produce 0.
// The _rtz rounding mode is
// used to produce the integer values.
int4   i2 = convert_int4_sat( f );

// 使用_rte和截断操作
int4   i3 = convert_int4_rte( f );

// 使用_rte和饱和操作
// similar to convert_int4_sat, except that
// floating-point values are rounded to the
// nearest integer instead of truncated
int4   i4 = convert_int4_sat_rte( f );

定点转化为浮点

int4   i;

// convert ints to floats using the default rounding mode. ???
float4 f = convert_float4( i );

// convert ints to floats. integer values that cannot
// be exactly represented as floats should round up to the
// next representable float.
float4 f = convert_float4_rtp( i );

浮点数转定点的c代码

1. _rte (round to even)

表示向偶数转化。对应的c版描述如下:

inline int convert_int_rte (float number) 
{
   int sign = (int)((number > 0) - (number < 0)); // (number > 0) -> 1, (number < 0) -> -1
   int odd = ((int)number % 2); // odd -> 1, even -> 0
   return ((int)(number-sign*(0.5f-odd)));
}

2. _rtz (round to zero)

表示向零靠近转化,即舍去小数位数。对应的c描述如下:

inline int convert_int_rtz (float number) 
{
   return ((int)(number));
}

3. _rtp (round to positive infinity)

表示向正无穷方向变化。对应的c描述如下:

inline int convert_int_rtp (float number) 
{
   return ((int)ceil(number));
}

4. _rtn (round to negative infinity)

表示向负无穷转化。对应的c的描述如下:

inline int convert_int_rtp (float number) 
{
   return ((int)floor(number));
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容