我正在使用OpenGL开发数据可视化工具,LAB颜色空间是我可以处理的数据可视化最容易理解的颜色空间(3轴数据被映射到颜色空间的3个轴).是否存在快速(例如,没有非整数求幂,适合在着色器中执行)算法,用于将LAB值近似转换为RGB值和从RGB值转换?
algorithm colors color-space pixel-shader function-approximation
我正在尝试实现一个快速浮点数= log2(浮点数).我写了一个简单的C程序来比较我的结果和log2,我得到一个小错误,我找不到源代码.
我正在采用识别浮点表示(忽略符号位)的方法2^(exponent) * 1.significand.使用我得到的日志属性log2(float) = exp + log2(1.significand).最终我会截断表查找的有效数字,但是现在我想验证正确的结果.
有关灵感的进一步背景阅读:http://www.icsi.berkeley.edu/pubs/techreports/TR-07-002.pdf
这就是问题所在.这是一个简单的程序,它提取浮点位并将指数加到log2(有效数字).
#include <math.h>
#include <stdint.h>
#include <stdio.h>
int main()
{
typedef union {
int32_t i;
float f;
} poly32_t;
float x = 31415926535.8;
poly32_t one;
one.f = 1.0f;
uint32_t ii;
uint32_t num_iter = 15;
for(ii=0; ii < num_iter; ++ii) {
poly32_t poly_x;
poly32_t poly_x_exponent;
poly32_t poly_x_significand;
// extract the exponent and significand
poly_x.f = x;
poly_x_significand.i = (0x007fffff & poly_x.i); …Run Code Online (Sandbox Code Playgroud) 这是一个在SSE/AVX指令系列中经验丰富的用户,以及熟悉其性能分析的人员.我看到了很多不同的实现和方法,从较旧的SSE2到新的.网络充斥着这样的链接.但就我个人而言,我对sse装配分析并不十分经验.有些人指出了uops,缓存,这需要一些低级知识.所以我要求提示和你的个人经历.如果你有时间推出一些比较,在"什么是最快的"以及为什么,你看到了什么方法.实现可能不那么精确,单个FP精度的10-16位就足够了.越多越好,但是当它不影响速度时.
PS.为了避免元洪水,我可以准确地描述任务的细节:
__m128 sincos(float x); 返回其sin(x)和cos(x)值近似值.nan,inf,等等).如果方法需要参数规范化,其性能实现(fmod())也是主题.但问题不在于处理特殊FP案件.这可能是重复的,但我没有在这里找到类似的问题,所以请指出我,如果已经有一个.
algorithm ×1
avx ×1
c ×1
color-space ×1
colors ×1
math ×1
performance ×1
pixel-shader ×1
sse ×1
trigonometry ×1