Compiler construction 着色器运行时是如何实现的?

Compiler construction 着色器运行时是如何实现的?,compiler-construction,shader,llvm,compiler-optimization,Compiler Construction,Shader,Llvm,Compiler Optimization,我刚刚完成了LLVM教程(万花筒)。现在我正在计划我的第一个基于LLVM的实践项目 我的目标是编写一个类似于GLSL或HLSL的着色器编译器/运行时。但我发现很难开始 网上有许多论文/技术/工具,如和。但我不知道这些东西是否符合我的目标 我在stackoverflow上四处搜索,发现了以下内容: 那篇文章的答案对我来说太笼统了 为了使我的问题更具体,我将重点放在着色器的后端(运行时)。 特别是以下分问题: 假设我已经有一个AST了。如何生成代码,以便对多个数据应用JIT ted指令 我猜复杂的

我刚刚完成了LLVM教程(万花筒)。现在我正在计划我的第一个基于LLVM的实践项目

我的目标是编写一个类似于GLSL或HLSL的着色器编译器/运行时。但我发现很难开始

网上有许多论文/技术/工具,如和。但我不知道这些东西是否符合我的目标

我在stackoverflow上四处搜索,发现了以下内容: 那篇文章的答案对我来说太笼统了

为了使我的问题更具体,我将重点放在着色器的后端(运行时)。 特别是以下分问题:

  • 假设我已经有一个AST了。如何生成代码,以便对多个数据应用JIT ted指令

    我猜复杂的着色器运行时不会像这样幼稚:

    for(int i = 0; i < dataSetSize; ++i) {
        ApplyJITtedFunction(shaderProgram, element[i]);
    }
    
    for(int i=0;i
  • 如何处理分支(
    if
    s,
    while
    s)

  • 如何组织数据集的内存布局,以最大限度地利用数据并行性

  • 如何对数据集的每个元素进行排序计算 因此,数据访问是本地的(我认为这对于一些旧的CUDA设备很重要,它们的内存访问模式(例如合并)与CPU非常不同。)