标签: stencils

浮点乘法执行速度较慢,具体取决于C中的操作数

我正在对我之前从文件中读取的矩阵执行模板计算.我使用两种不同的矩阵(NonZero类型和Zero类型).两种类型共享边界的值(通常为1000),而其余元素对于零类型为0,对于NonZero类型为1.

代码将文件的矩阵存储在两个相同大小的分配矩阵中.然后,它使用自己的值和邻居值(添加x 4和mul x 1)在一个矩阵的每个元素中执行操作,并将结果存储在第二个矩阵中.一旦计算完成,交换矩阵的指针并且执行相同的操作有限次数.这里有核心代码:

#define GET(I,J) rMat[(I)*cols + (J)]
#define PUT(I,J) wMat[(I)*cols + (J)]

for (cur_time=0; cur_time<timeSteps; cur_time++) {
    for (i=1; i<rows-1; i++) {
        for (j=1; j<cols-1; j++) {
            PUT(i,j) = 0.2f*(GET(i-1,j) + GET(i,j-1) + GET(i,j) + GET(i,j+1) + GET(i+1,j));
        }
    }
    // Change pointers for next iteration
    auxP = wMat;
    wMat = rMat;
    rMat = auxP;
}
Run Code Online (Sandbox Code Playgroud)

我暴露的情况使用固定量的500个timeSteps(外部迭代)和8192行和8192列的矩阵大小,但是在更改timeSteps或矩阵大小的数量时问题仍然存在.请注意,我只测量算法的这个具体部分的时间,因此从文件读取矩阵或其他任何因素都会影响时间度量.

它发生了什么,取决于我使用哪种类型的矩阵,我得到不同的时间,使用Zero类型时获得更差的性能(每隔一个矩阵执行与NonZero类型相同,因为我已经尝试生成一个充满随机的矩阵值).

我确定它是乘法运算,就像我删除它并只留下添加,它们执行相同的操作.注意,对于零矩阵类型,大多数类型的和的结果将为0,因此操作将为"0.2*0".

这种行为对我来说当然很奇怪,因为我认为浮点运算独立于操作数的值,这看起来不像这里的情况.我也尝试捕获并显示SIGFPE异常以防出现问题,但我没有得到任何结果.

如果有帮助,我使用的是Intel Nehalem处理器和gcc 4.4.3.

c floating-point performance x86 stencils

17
推荐指数
1
解决办法
2741
查看次数

无法检测为什么下面的代码没有被矢量化

我一直在努力使用某个特定的应用程序,我已经尝试了一切.从自动向量化到手动编码的SSE内在函数.但不知何故,我无法在基于模板的应用程序上获得加速.

以下是我当前代码的片段,我使用SSE内在函数进行了矢量化.当我使用-vec-report3编译(Intel icc)时,我不断获取此消息:
remark:loop未向量化:语句无法向量化.

  #pragma ivdep
  for ( i = STENCIL; i < z - STENCIL; i+=4 )
  {
    it = it2 + i;

    __m128 tmp2i = _mm_mul_ps(_mm_add_ps(_mm_load_ps(&p2[i+j*it_j-it_j4+k*it_k]),_mm_load_ps(&p2[i+j*it_j+it_j4+k*it_k])),X4_i); //loop was not vectorized: statement cannot be vectorized
    __m128 tmp3 = _mm_mul_ps(_mm_add_ps(_mm_load_ps(&p2[i+j*it_j-it_j3+k*it_k]),_mm_load_ps(&p2[i+j*it_j+it_j3+k*it_k])),X3_i);
    __m128 tmp4 = _mm_mul_ps(_mm_add_ps(_mm_load_ps(&p2[i+j*it_j-it_j2+k*it_k]),_mm_load_ps(&p2[i+j*it_j+it_j2+k*it_k])),X2_i);
    __m128 tmp5 = _mm_mul_ps(_mm_add_ps(_mm_load_ps(&p2[i+j*it_j-it_j +k*it_k]),_mm_load_ps(&p2[i+j*it_j+it_j +k*it_k])),X1_i);

    __m128 tmp6 = _mm_add_ps(_mm_add_ps(_mm_add_ps(tmp2i,tmp3),_mm_add_ps(tmp4,tmp5)), _mm_mul_ps(_mm_load_ps(&p2[it]),C00_i));

    _mm_store_ps(&tmp2[i],tmp6);

   }
Run Code Online (Sandbox Code Playgroud)

我错过了一些关键的东西吗 由于该消息没有说明为什么它不能被矢量化,我发现很难确定瓶颈.

更新: 仔细考虑了建议后,我按照以下方式调整了代码.我认为最好将其进一步分解,以确定实际上导致向量依赖性的语句.

//#pragma ivdep
  for ( i = STENCIL; i < z - STENCIL; i+=4 )
  {
    it = it2 + …
Run Code Online (Sandbox Code Playgroud)

c sse vectorization icc stencils

11
推荐指数
1
解决办法
1209
查看次数

新创建的自定义列表形状在Microsoft Visio 2013 x64中不起作用

目的:

首先,我应该说我想做什么,然后在下一部分(描述)中描述为实现我的目标而要做的事情。

我想从功能区“插入”选项卡中“图零件”部分的“ 普通容器”创建“ 自定义列表主形状”。然后,我想创建另一个Master Shape,它可以用作Created Custom List Master Shape的成员形状

换句话说,我想将“ 创建的主形状”添加到“ 自定义列表”主形状中,例如将“ 成员”和“分隔符”主形状附加到UML模具的“ 类”主形状中。

因此,在实现我的目标时遇到了一些问题,我将在下一部分中对其进行描述。


说明:

在“ Visio模具(.vssx)”文件中创建了一些新的Master Shape,如下所示:

新创建的具有使用过的主形状的主形状

图1-使用旧的主形状新建的主形状

  1. 属性主形状(绿色框):UML类模具(蓝色框)成员主形状创建。
  2. 对象主形(红色框):从功能区的“插入”选项卡中“图零件”部分的“ 普通容器创建。

已创建属性主形状,以用作对象主形状中的成员形状,就像在UML模具的类主形状中使用的成员主形状一样。

拥有初始成员的班级大师造型

图2-具有初始成员的类主形

成员主形创建的属性主形已更改如下:

  • 我向其中添加了一个形状数据(图3)。

    属性主形状的“形状数据”对话框

    图3-Property Master Shape的“ Shape Data”对话框

  • 我向其中添加了一个数据图形项(图4)。

    属性主形状的“数据图形”和“数据图形项”对话框

    图4-属性主形的“数据图形”和“数据图形项”对话框

  • 我更改了ShapeSheet窗口的 …

visio shape shapes shapesheet stencils

5
推荐指数
1
解决办法
1283
查看次数

通用OpenCL模板内核和主机

我是OpenCL的新手.

我想编写一个通用内核,以后我可以将其用途扩展到其他内存非合并模式,并将其与Rectangular stencil pattern简单配对(也避免了越界访问).

该内核控制本地内存(__local float ?lmem)的使用.

截至目前,我的.cl文件结构如下:

__kernel void kmain (
    __global float ?in ,
    __global float ?out ,
    __global float ?in2 ,
    __local float ?lmem)
{
    int wg_x = get group id(0);
    int wg_y = get group id(1);
    int wi_x = get local id(0);
    int wi_y = get local id(1);     

    // number of work units each work-item processes
    for (int iter_x = 0; iter_x< NUM_WUS_X-1, iter_x++ ) {
        for (int iter_y = …
Run Code Online (Sandbox Code Playgroud)

kernel generic-programming memory-access opencl stencils

5
推荐指数
1
解决办法
227
查看次数

在Android本机代码(ndk)中使用OpenGL ES 2.0 FrameBuffer(FBO)和Stencil

我正在尝试生成一个frambuffer对象,并使用NDK(r5b)在本机android应用程序中使用模板.目标设备正在运行froyo 2.2,支持OpenGL ES 2.0.

所以,我一直在我的c ++本机库中编写大量的gl代码,除此之外没有遇到任何问题.我似乎无法使它工作.

这是帧缓冲区创建的代码片段.完美性很好,但屏幕仍然完全黑色.这就像我正在创建的fbo并没有真正绑定到应用程序的Java部分创建的gl表面.我的应用程序代码的其余部分都很好,如果我删除fbo创建和绑定,一切都很好,除了我没有我的应用程序所需的模板工作.

    GLint backingWidth = 1024;
      GLint backingHeight = 1024;


    //Create the FrameBuffer and binds it
    glGenFramebuffers(1, &_defaultFramebuffer);
    checkGlError("glGenFramebuffers");
    glBindFramebuffer(GL_FRAMEBUFFER, _defaultFramebuffer);
    checkGlError("glBindFramebuffer");

    //Create the RenderBuffer for offscreen rendering // Color
    glGenRenderbuffers(1, &_colorRenderbuffer);
    checkGlError("glGenRenderbuffers color");
    glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderbuffer);
    checkGlError("glBindRenderbuffer color");
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, backingWidth, backingHeight);
    checkGlError("glRenderbufferStorage color");

    //Create the RenderBuffer for offscreen rendering // Depth
    glGenRenderbuffers(1, &_depthRenderbuffer);
    checkGlError("glGenRenderbuffers depth");
    glBindRenderbuffer(GL_RENDERBUFFER, _depthRenderbuffer);
    checkGlError("glBindRenderbuffer depth");
    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, backingWidth, backingHeight);
    checkGlError("glRenderbufferStorage depth");

    //Create the RenderBuffer for offscreen rendering // Stencil
    glGenRenderbuffers(1, …
Run Code Online (Sandbox Code Playgroud)

android framebuffer stencils stencil-buffer android-ndk

5
推荐指数
1
解决办法
6934
查看次数

在 GL 中组合多个模板

我想在 OpenGL 中设置多个模板,然后绘制它们的多个组合。

例如:我有两个这样的矩形模板:

多个区域

然后我想画成:

  1. 任何地方
  2. 左矩形(蓝色+紫色)
  3. 右矩形(紫色+红色)
  4. 中间矩形(紫色)
  5. 整个彩色区域(蓝色+紫色+红色)

我发现可以在模板缓冲区的不同位中声明多个模板,但我不知道如何。我如何设置glStencilOpglStencilFunc使其工作?

或者我可以(应该)使用glScissor它吗?

opengl stencils stencil-buffer

5
推荐指数
1
解决办法
1600
查看次数

将函数传递给模板组件

是否可以将函数传递给stencilJs组件?

就像是:

@Prop() okFunc: () => void;
Run Code Online (Sandbox Code Playgroud)

我有一个模态,想Ok在模态页脚中单击的按钮上动态调用传递的函数,就像onClick在普通 HTML 按钮上一样。

html function stencils web-component

5
推荐指数
2
解决办法
4560
查看次数

如何在Evolus Pencil中恢复删除的默认模板?

恢复了从中删除的一个默认模板Collection Pane(只需单击close图标).它现在是从计算机中删除还是只是隐形?我可以从Evolus Pencil Project 下载页面下载它.但是我可以在不下载的情况下恢复它吗?

stencils sketching mockup-tool evolus-pencil

4
推荐指数
1
解决办法
1961
查看次数