小编die*_*etr的帖子

Python的OpenGL矩阵数学实用程序?

在我自己做之前,有没有可用于4x4矩阵的OpenGL特定/兼容矩阵数学的Python库?基本上,我需要Android的android.opengl.Matrix类提供的功能集.

python opengl matrix

9
推荐指数
2
解决办法
5285
查看次数

SIMD/SSE新手:简单的图像过滤

我是SIMD/SSE的新手,我正在尝试做一些简单的图像过滤(模糊).下面的代码使用水平方向上的简单[1 2 1]加权过滤8位灰度位图的每个像素.我一次创建16个像素的总和.

至少对我而言,这段代码看起来非常糟糕的是,其中有很多插入/提取,这不是很优雅,也可能减慢一切.在转移时是否有更好的方法将数据从一个reg包装到另一个reg?

buf是图像数据,16字节对齐.w/h是宽度和高度,16的倍数.

__m128i *p = (__m128i *) buf;
__m128i cur1, cur2, sum1, sum2, zeros, tmp1, tmp2, saved;
zeros = _mm_setzero_si128();
short shifted, last = 0, next;

// preload first row
cur1 = _mm_load_si128(p);
for (x = 1; x < (w * h) / 16; x++) {
    // unpack
    sum1 = sum2 = saved = cur1;
    sum1 = _mm_unpacklo_epi8(sum1, zeros);
    sum2 = _mm_unpackhi_epi8(sum2, zeros);
    cur1 = tmp1 = sum1;
    cur2 = tmp2 = sum2;
    // "middle" pixel
    sum1 …
Run Code Online (Sandbox Code Playgroud)

performance x86 sse image-processing simd

7
推荐指数
1
解决办法
2966
查看次数

SSE2内在函数:直接访问内存

许多SSE指令允许源操作数是16字节对齐的存储器地址.例如,各种(非)包装说明.PUNCKLBW有以下签名:

PUNPCKLBW xmm1,xmm2/m128

现在,对于内在函数来说,这似乎是不可能的.看起来必须使用_mm_load*intrinsics来读取内存中的任何内容.这是PUNPCKLBW的内在特征:

__m128i _mm_unpacklo_epi8(__ m128i a,__ m128i b);

(据我所知,__ m128i类型总是指XMM寄存器.)

现在,这是为什么?这是相当悲伤,因为我通过直接寻址内存看到了一些优化潜力......

optimization assembly sse simd intrinsics

2
推荐指数
1
解决办法
3338
查看次数