gpt4 book ai didi

programming-languages - SIMD 编程语言

转载 作者:行者123 更新时间:2023-12-04 01:48:15 28 4
gpt4 key购买 nike

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

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

这是一个(部分)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);
}

在这种语言中真正必须的东西是:
  • 内置 swizzle 运算符
  • 矢量操作(点、交叉、归一化、饱和、反射等)
  • 支持自定义数据类型(结构)
  • 动态分支会很好(for 循环,if 语句)
  • 最佳答案

    您最好的选择可能是 OpenCL。我知道它主要被宣传为一种在 GPU 上运行代码的方式,但 OpenCL 内核也可以在 CPU 上编译和运行。 OpenCL 基本上是 C 语言,但有一些限制:

  • 没有函数指针
  • 无递归

  • 和一堆补充。特别是向量类型:
    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 不能调用任意库等。 .

    Here是包含所有扩展的快速引用/备忘单。

    关于programming-languages - SIMD 编程语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1417681/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com