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

Posted 帅的发光发亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio 2019相关的知识,希望对你有一定的参考价值。

一、 什么是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编译器

下载链接:https://github.com/ispc/ispc
下载后即可看见我们所需的编译器文件,如下图所示:

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解决方案

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

4、对于ispc文件配置

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

修改的地方:

  • 配置属性 -> 项类型 -> 常规:自定义工具->应用

  • 配置属性 -> 自定义生成工具 -> 常规 -> 命令行

$(ProjectDir)\\External\\ispc -O2 $(ProjectDir)ispc\\%(Filename).ispc -o $(ProjectDir)ispc\\%(Filename).obj -h $(ProjectDir)ispc\\%(Filename).h --opt=fast-math --arch=x86-64

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

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

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


编译过后把生成的文件加入进来;

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

注意

记得把示例代码的头文件改了,我们生成的头文件名字和原来的不一样。

改成我们生成这个头文件名称:

6、运行结果

点击运行:

这样我们就完成了将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio 2019。

以上是关于将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio 2019的主要内容,如果未能解决你的问题,请参考以下文章

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

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

加速图像处理的神器: INTEL ISPC编译器基于CMAKE快速创建VISUAL STUDIO项目

加速图像处理的神器: INTEL ISPC编译器基于CMAKE快速创建VISUAL STUDIO项目

如何在 Visual Studio 或 CLion 调试器中单步执行 ispc 源文件?

任务是使用 p 线程并行化矩阵乘法并使用英特尔 ISPC 编译器进行矢量化