将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio

将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio

一. 什么是ispc?

ispc 基于一个c,它可以运行在上,但它通常提供了一个 3x 或者更多的加速,不需要编写内部代码。 ispc 还支持并行并行,使得能够编写实现性能改进的程序,这两个核心和矢量单位大小。

ispc的设计中有几个关键原则:

  • 为C 语言构建一小组扩展,这将向性能面向对象的程序员提供优秀的性能。
  • 要在程序员和hardware–in之间提供一个细微的抽象层,要有一个执行和数据模型来理解它们的源程序。
  • 为了使它能够在没有直接写入内部的low-programmer-productivity活动的情况下,可以采用of矢量单元的计算功能。
  • To C/C++ 应用程序代码与运行在同一服务器上的SPMD ispc 代码之间的机会explore在两种语言之间进行轻量级函数调用,并通过指针直接共享数据,不复制或者重新格式化。

ispc 是一个带有BSD许可证的开源编译器。 它使用出色的编译基础结构用于后端代码生成和优化,并且是在github上托管的。 它支持 Windows。Mac和 Linux,同时具有x86和x86-64目标。 它目前支持 SSE2.SSE4.AVX1和AVX2指令集。

二. 配置过程

1.下载ispc编译器

下载链接:http://ispc.github.io/documentation.html

下载后即可看见我们所需的编译器文件,如下图所示:
[外链图片转存失败(img-m5FtucuA-1563791541067)(C:\Users\liangyinglin\Desktop\p2.png)]

2.新建vs空项目,并编写简单的ispc文件

这里的ispc测试文件,我使用了github开源仓库ispc的其中一个例子。

simple.ispc

export void simple(uniform float vin[], uniform float vout[],
                   uniform int count) {
    foreach (index = 0 ... count) {
        // Load the appropriate input value for this program instance.
        float v = vin[index];

        // Do an arbitrary little computation, but at least make the
        // computation dependent on the value being processed
        if (v < 3.)
            v = v * v;
        else
            v = sqrt(v);

        // And write the result to the output array.
        vout[index] = v;
    }
}

simple.cpp

#include <stdio.h>
#include <stdlib.h>

// Include the header file that the ispc compiler generates
#include "simple.h"
using namespace ispc;

int main() {
    float vin[16], vout[16];

    // Initialize input buffer
    for (int i = 0; i < 16; ++i)
        vin[i] = (float)i;

    // Call simple() function from simple.ispc file
    simple(vin, vout, 16);

    // Print results
    for (int i = 0; i < 16; ++i)
        printf("%d: simple(%f) = %f\n", i, vin[i], vout[i]);

    return 0;
}

3. 加入vs解决方案

将上面的两个文件加入到解决方案

[外链图片转存失败(img-O3i1FyXp-1563791541065)(C:\Users\liangyinglin\Desktop\p1.png)]

4. 对于ispc文件配置

对于simple.ispc,右键并点击属性

修改的地方

  • 配置属性 -> 项类型 -> 常规:自定义工具
  • 配置属性 -> 自定义生成工具 -> 常规 -> 命令行
$(ProjectDir)\External\ispc -O2 $(ProjectDir)ispc\%(Filename).ispc -o $(ProjectDir)ispc\%(Filename).obj -h $(ProjectDir)ispc\%(Filename).h --opt=fast-math --arch=x86

注意目录:我的ispc.exe放在了External文件夹, 我的simple.ispc放在了ispc文件夹,故我的目录是这样子,如有目录的不一样,还需要根据自己的情况进行修改

  • 配置属性 -> 自定义生成工具 -> 常规 -> 输出
$(ProjectDir)ispc\%(Filename).obj

详情见下面两张截图

[外链图片转存失败(img-4GjOpMrh-1563791541073)(C:\Users\liangyinglin\Desktop\p3.png)]

[外链图片转存失败(img-M9qFzlPr-1563791541074)(C:\Users\liangyinglin\Desktop\p4.png)]

5.编译生成相应的头文件加入到解决方案

点击运行即可,看到新增了两个文件。

simple.h与simple.h就是通过ispc编译器生成的中间文件,后面用在simple.cpp中

[外链图片转存失败(img-tFKhRqe7-1563791541075)(C:\Users\liangyinglin\Desktop\p6.png)]

6. 成功运行

运行结果:

[外链图片转存失败(img-f0I1kZVP-1563791541076)(C:\Users\liangyinglin\Desktop\p5.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值