SIMD编程语言(SIMD programming languages)

2019-07-17 21:27发布

在过去的几年中,我已经做了很多的SIMD编程,大部分我一直依赖于编译器的内部功能(如药粥SSE编程)或编程组件上的时间去真正漂亮东西。 然而,到现在为止,我几乎能找到任何编程语言与SIMD内置支持。

现在很明显有着色器语言如HLSL,CG和GLSL然而,那些对这种东西的原生支持,我在找东西是至少能够编译上证所没有自动向量化,但有内置的向量运算的支持。 难道这样的语言存在吗?

这是(的部分)的CG着色器,做了聚光灯和语法而言,这可能是最接近于我正在寻找的例子。

float4 pixelfunction(
    output_vs IN, 
    uniform sampler2D texture : TEX0, 
    uniform sampler2D normals : TEX1, 
    uniform float3 light, 
    uniform float3 eye ) : COLOR
{
    float4 color    = tex2D( texture, IN.uv );
    float4 normal   = tex2D( normals, IN.uv ) * 2 - 1;

    float3 T = normalize(IN.T);
    float3 B = normalize(IN.B);

    float3 N = 
        normal.b * normalize(IN.normal) +
        normal.r * T +
        normal.g * B;

    float3 V = normalize(eye - IN.pos.xyz);
    float3 L = normalize(light - IN.pos);
    float3 H = normalize(L + V);

    float4 diffuse  = color * saturate( dot(N, L) );
    float4 specular = color * pow(saturate(dot(N, H)), 15);
    float falloff   = dot(L, normalize(light));

    return pow(falloff, 5) * (diffuse + specular);
}

东西,将是一个真正的必须在这个语言是:

  • 内置调酒运营商
  • 向量操作(点,交叉,正常化,饱和,反映等等)
  • 自定义数据类型支持(结构)
  • 动态分支将是很好(for循环,if语句)

Answer 1:

你最好的选择可能是OpenCL的。 我知道它已经大多被大肆宣传为一种方式来运行在GPU上的代码,但OpenCL内核也可以编译并在CPU上运行。 OpenCL是基本上下,用一些限制:

  1. 没有函数指针
  2. 没有递归

和一堆增加的。 特别是矢量类型:

float4 x = float4(1.0f, 2.0f, 3.0f, 4.0f);
float4 y = float4(10.0f, 10.0f, 10.0f, 10.0f);

float4 z = y + x.s3210 // add the vector y with a swizzle of x that reverses the element order

在大需要注意的是,该代码必须是干净sperable,OpenCL的不能调出任意库,等等。但是,如果你的计算内核是相当独立的,那么你基本上得到一个载体增强C,其中不需要使用内联函数。

这里是所有分机的快速参考/ cheatsheet文件。



Answer 2:

它不是一个真正的语言本身,但对于单声道(库Mono.Simd ),将暴露的载体,以你和优化他们的业务并入SSE时参考:



Answer 3:

所以,最近英特尔发布ISPC这正是我一直在寻找在问这个问题的时候了。 它可以与普通的C代码链接的语言,具有和隐式执行模型,并在启动后提到的所有功能的支持(调酒运营商,分支,数据结构,矢量OPS,着色器等),并编译SSE2,SSE4, AVX,AVX2和至强融核向量指令。



Answer 4:

它是C ++库,而不是内置到语言,但征是相当无形一旦你的变量声明。



Answer 5:

目前最好的解决办法是通过创建一个后端的开源CG前端,Nvidia发布做我自己,但我想我自己保存的努力,所以我很好奇,如果它已经做过的事情。 最好我开始使用它的时候了。



Answer 6:

该d编程语言也提供了比Mono.SIMD类似的方式获得SIMD。



Answer 7:

这将是你正在寻找的Fortran。 如果没记错,甚至开源编译器(G95,gfortran)将SSE的优势,如果它在你的硬件来实现。



文章来源: SIMD programming languages