什么时候该用LUT(Look Up Table)技术?

什么是LUT?不解释,给两个例子。算法

(1)假设想要对RGB三原色求加权平均v=(b*114 + g*587 + r*299)/1000或者v=(b*117 + g*601 + r*306) >> 10,能够创建一块 1BYTE*256*256*256 =  16MB的内存间,存放v值。多线程

(2)假设想计算sin函数值,精度在1.0e-10,能够把0~90度分红2^17份,每0.00068664550781度一个值,创建一个 1double*(2^17) = 1MB的内存存放,不是0.00068664550781度整数倍的,能够线性内插。精度绝对在1.0e-10以上。[0,90]以外的可推算,仅需考虑正负号。函数

问题是,何时应该使用LUT,何时不该该使用它?要考虑的问题不少。LUT须要耗费额外的内存是显然的,所以我把它分解成了4个问题:线程

(1)当使用LUT比不使用更快速时,什么状况下使用LUT?内存

内存资源充足时,计算密集型程序基本上都使用LUT,……资源

(2)当使用LUT比不使用更快速时,什么状况下不使用LUT?程序

不是计算密集型程序,CPU资源很充足,须要比LUT能够提供的更高的精度,为了保证源代码简洁,……源代码

(3)当使用LUT比不使用更耗时时,什么状况下使用LUT?

CPU不仅在干这一件事,多线程,……

(4)当使用LUT比不使用更耗时时,什么状况下不使用LUT?

极其简单的算法,如求补、求反、求绝对值,内存不足时,……

相关文章
相关标签/搜索