首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SIMD程序设计语言

SIMD程序设计语言
EN

Stack Overflow用户
提问于 2009-09-13 12:50:45
回答 8查看 4.3K关注 0票数 10

在过去的几年里,我做了很多SIMD编程,大部分时间我都依赖于编译器内部函数(比如SSE编程)或编程程序集来获得真正优秀的东西。然而,到目前为止,我还没有找到任何内置支持SIMD的编程语言。

现在显然有一些着色器语言,如HLSL、Cg和GLSL,它们对这类东西都有本地支持,但是,我正在寻找的东西至少可以编译成SSE,不需要自动向量化,但是内置支持向量操作。这种语言存在吗?

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

代码语言:javascript
复制
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);
}

在这种语言中,真正必须要做的事情是:

  • 内置的swizzle操作符
  • 矢量运算(点、交叉、正规化、饱和、反射等)
  • 支持自定义数据类型(结构)
  • 动态分支很好(用于循环,if语句)
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-28 21:08:44

所以最近英特尔发布了ISPC,这正是我在问这个问题时想要的。它是一种可以与普通C代码链接的语言,具有和隐式执行模型,并支持start post中提到的所有特性(swizzle操作符、分支、数据结构、向量操作、着色器样),并为SSE2、SSE4、AVX、AVX2和Xeon矢量指令编译。

票数 7
EN

Stack Overflow用户

发布于 2009-09-21 14:11:07

你最好的选择可能是OpenCL。我知道它被炒作是在GPU上运行代码的一种方式,但是OpenCL内核也可以编译并在CPU上运行。OpenCL基本上是C,有一些限制:

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

还有一堆额外的东西。特别是矢量类型:

代码语言:javascript
复制
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

重要的是,代码必须清晰易懂,OpenCL不能调用任意库等等。但是,如果计算内核是相当独立的,那么基本上可以得到一个向量增强C,在这里您不需要使用内部代码。

这里是一个包含所有扩展的快速引用/备忘表。

票数 7
EN

Stack Overflow用户

发布于 2009-09-13 13:44:56

它实际上不是语言本身,但是有一个Mono (Mono.Simd)库,它将向您公开向量并尽可能地将它们上的操作优化到SSE中:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1417681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档