问题标签 [ispc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
4008 浏览

programming-languages - SIMD 编程语言

在过去的几年里,我做了很多 SIMD 编程,大部分时间我一直依赖编译器内部函数(例如用于 SSE 编程的函数)或编程汇编来获得真正漂亮的东西。然而,到目前为止,我几乎找不到任何内置支持 SIMD 的编程语言。

现在显然有一些着色器语言,如 HLSL、Cg 和 GLSL,它们对这类东西具有本机支持,但是,我正在寻找至少能够在没有自动矢量化的情况下编译为 SSE,但具有对矢量操作的内置支持的东西. 这样的语言存在吗?

这是一个(部分)Cg 着色器的例子,它做一个聚光灯,就语法而言,这可能是最接近我正在寻找的。

在这种语言中真正必须的东西是:

  • 内置调酒运算符
  • 矢量操作(点、交叉、归一化、饱和、反射等)
  • 支持自定义数据类型(结构)
  • 动态分支会很好(for循环,if语句)
0 投票
0 回答
435 浏览

performance - 将线程从 2 增加到 3 不会增加 mandelbrot 的加速量

我正在使用具有 4 个内核和 4 个线程的 Intel i5 处理器。目前我正在使用 pthreads 和 ISPC(英特尔 SPMD 程序编译器)模拟 mandelbrot 集。当我使用两个线程来计算 mandelbrot 集图像时,基于任务划分,即图像的空间分解,我看到 1.9 倍的速度,当我使用 3 个线程时,我看到 1.65 倍的加速,4 个线程加速到 2.4 倍。由于 i5 有 4 个线程,因此在程序中(使用 pthread)具有足够的并行性,预计速度会提高 4 倍。为什么使用 3 个线程时速度会下降?我没有看到预期加速的原因是什么?在 mandelbrot 的情况下,有哪些方法可以通过充足的并行性获得更高的速度?

注意:我使用 gcc 将 pthreads 作为 API 进行编译。该划分基于图像的空间分解。我没有使用任何锁或信号量。

mandelbrot 的 wiki 链接 http://en.wikipedia.org/wiki/Mandelbrot_set

ISPC 文档的 github 链接 http://ispc.github.io/

如果您发现这些问题无关紧要,请将我重定向到适当的来源。谢谢您的时间。

0 投票
1 回答
140 浏览

c++ - ISPC - 我可以将 CPU 线程数限制为 1 吗?

我在 Windows 上使用基于 ISPC 的程序,我想知道是否有任何方法可以将 CPU 线程数限制为 1,因为我必须运行一些实验。

0 投票
0 回答
172 浏览

ubuntu - 在 UBUNTU 32 位上运行 ISPC

我已经安装了 32 个 Ubuntu 14.0,我可以在上面安装和使用 ISPC(Intel SPDM 程序编译器)吗?如果是,那怎么办?如果不是那为什么?我已经尝试了多次但没有找到合适的答案..提前谢谢你

0 投票
2 回答
1152 浏览

c - 如何使用 CMake 构建 ispc 文件?

我有一个简单的项目。它包含两个文件:

(ispc 文件是https://ispc.github.io/的来源)

要手动编译文件,我只需使用:

所以对于我的 cmake 文件,它最初看起来像

但当然它不会链接,因为它缺少 kernel.o 中的符号

所以问题是:如何让 cmakekernel.ispc使用编译器进行ispc编译,以及如何让 cmake 然后将其链接到my_program.

0 投票
1 回答
1786 浏览

linux-kernel - 为什么内核中不使用 SIMD 指令?

我在内核中找不到太多使用 SIMD 指令(如 SSE/AVX)的地方(除了一个用来加速 RAID6 奇偶校验计算的地方)。

Q1) 有什么具体原因,还是只是缺少用例?

Q2) 如果我想使用 SIMD 指令,比如设备驱动程序,今天需要做什么?

Q3)将像ISPC这样的框架合并到内核中会有多难(仅用于实验)?

0 投票
1 回答
170 浏览

vectorization - icc的向量化和ispc的向量化有什么区别?

英特尔 C/C++ 编译器和英特尔 SPMD 程序编译器都可以生成矢量化代码。我的问题是,如果我的 icc 也可以生成矢量化代码,我是否应该使用 ispc 进行代码矢量化?

0 投票
1 回答
99 浏览

visual-c++ - 从 ispc 导出的函数中按值返回结构?

我无法从导出的 ispc 函数(使用 ispc v1.12 和 msvc 2017)中按值在 c++ 端获取结构。程序编译和运行顺利(32 位,调试模式),除了我有空字段,我期望非零值。在 32 位发布模式下,我的值​​略有不同。在 64 位中,我在 c++ 端总是有零。我还没有找到任何直接提及或此类片段的示例。捆绑样本仅包含返回导出函数的 void 或原始类型。我的代码:

内核.ispc:

kernel.h(由ispc生成,相关部分):

主.cpp:

ispc 文件编译的命令行参数(用于 32 位调试模式):

输出(32 位调试模式或 64 位两种模式):

输出(32bit 释放模式):

每次运行我都得到相同的值。我错过了什么或做错了什么?

提前致谢

0 投票
1 回答
509 浏览

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

我开始使用ispc(英特尔 SPMD 程序编译器),并且能够编译和运行随分发提供的示例。我接下来想做的是能够单步.ispc执行 Visual Studio(或 CLion)调试器中的文件。

根据文档ispc可以使用该-g选项指示编译器发出调试符号。我已将其添加到提供的CMakeLists.txt中,但我似乎无法让 Visual Studio 实际进入 ispc 函数。

例如,我在simple这里的示例中设置了一个断点:https ://github.com/ispc/ispc/blob/master/examples/simple/simple.cpp#L49

单击“进入”时,我希望 Visual Studio 能够进入该函数的定义,此处为:https ://github.com/ispc/ispc/blob/master/examples/simple/simple.ispc#L35 。相反,Visual Studio 会跳过并继续使用simple.cpp.

我怀疑 Visual Studio 要么无法找到ispc编译器生成的调试符号,和/或不知道这些符号与simple.ispc文件相关联。

我发现去年的这篇博文除其他外说:

最新版本的 ispc (1.9.2) 支持使用 Visual Studio 进行有限调试。用布尔值检查结构似乎不起作用,本地窗口非常不确定,但或多或​​少有效。单步工作。分析工作,但似乎有点不确定。

所以很明显这是可能的;我只是不太了解编译器、调试器和 IDE 如何交互以实现这一点。有谁知道如何做到这一点?

使用 Visual Studio 2017 (v15.9.17) 运行 Windows 10 (v1903)

0 投票
1 回答
199 浏览

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

在 .ispc 文件中使用 pthread 生成错误如下: (1) t.ispc:2:13: Error: Illegal to return a "variating" or vector type from export function "matrix_mult_pl" export void * matrix_mult_pl( void *arg )

(2) t.ispc:2:36: Error: Varying pointer type parameter "arg" 在导出函数中是非法的。导出 void * matrix_mult_pl( void *arg )

(3) t.ispc:6:11: 错误:语法错误,意外'int'。tid = *(int *)(arg); // 获取顺序分配的线程 ID。^^^

以及更多错误。编码器附在下面。请查看在 ISPC 中使用 pthreads 的问题。

线程.c 文件

线程.ispc 文件

为什么 ISPC 文件没有通过 pthread 并行化执行向量化?