在过去几年来,我已经做了很多单指令编程和大多数时间我一直依靠编译器的固有职能(例如对上证程)或编程会得到真正漂亮的东西。然而,直到现在我几乎已经能够找到任何一种编程语言的内在支持用于单指令.

现在显然有着色器的语言,如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);
}

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

  • 建立在运营商的调酒
  • 矢量行动(点,交叉,正常化,饱和,反映等等)
  • 支持定义的数据类型(结构)
  • 动态分支会漂亮的(对于循环,如果声明)
有帮助吗?

解决方案 3

因此,最近释放英特尔 ISPC 这正是我一直在寻找什么时候问这个问题。这是一个语言,可以链接的正常C码、拥有和隐含的执行模式,并支持为提到的所有功能在所启动员额(调酒运营商、分支,数据结构,矢量的行动,着色器等)和编纂用于SSE2、SSE4,也可参考,AVX2,并强披矢量的说明。

其他提示

你最好的选择可能是例子我知道它主要是一直大肆宣传的一种方式上运行代码Gpu,但usb类仁也可以是汇编和运行上的Cpu。Usb类基本上是C有几个限制:

  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,了广泛的可能性-您不能打电话给任意的图书馆,等等。但如果你计算的内核是合理的独立,那么你基本上得到一矢量的增强C在那里你不需要使用内部函数。

在这里, 是一个快速参考/速记所有的扩展。

这不是真的语言,但有一个图书馆为单(单。单指令),将获得的矢量对你和优化业务在他们进入证,只要有可能:

这是一个图书馆用C++,而不是建立进入该语言,但是 是很不可见一旦你的变量是宣布。

目前最好的解决办法是做我自己通过创建一个后终于开放源码Cg前端,更释放,但是我喜欢保存自己的努力,以便我很好奇如果它已经完成之前。好,我会开始使用它的时候了。

D编程语言中也提供了访问的单指令以类似的方式比单。单指令.

这将是Fortran,你是在寻找。如果我没记错的话,甚至公开来源汇编者(g95,gfortran)将利用证如果它是实现你的硬件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top