gpgpu - 计算着色器最佳实践/现代风格示例
问题描述
我一直在以最糟糕的风格编写 gpgpu 计算着色器(即只有一个整体程序)。我认为问题是我已经阅读了不是这样的虚拟代码,所以我希望有人能指出一些代码来学习风格。
我希望以更具功能性的风格进行编程(对于我的并行减少、蝴蝶等),并且想知道是否可以使用宏来实现某些目标。(扫描被认为是 gpgpu 的原语)
我正在寻找的东西包括:
- hlsli 包含文件以防止重复。
- 铸造组共享内存。起初我放弃了,因为我无法正确转换 c 数组。
groupshared uint4 UInt4Array[4];
void main(...)
{
float Float1Array[16] = (float[16])UInt4Array;
}
- 通过输出参数写入组共享内存。
void square(float input, out float ans)
{
ans = input*input
}
groupshared float shared[THREAD_GROUP_LENGTH];
numthreads(THREAD_GROUP_LENGTH, 1, 1)]
void main(uint3 position : SV_DispatchThreadID)
{
square(position.x, shared[position.x])
}
另外,如果有人有任何这样的风格提示,请发布。
解决方案
推荐阅读
- mysql - 平面表上的 mySQL 包容性搜索
- html - 表格行的css box-shadow?
- sql - 向现有表添加复合键
- javascript - PHP 和基本身份验证
- angular - 将数据从 Angular 应用程序中的 main.ts 文件传递给服务
- apache-nifi - 启动 NIFI 时 .. 出现异常:java.nio.file.FileSystemException:./state/local/partition-0/107654.journal:打开的文件太多
- mysql - 为什么连接测试失败?
- javascript - 如何修复 SlickNav 未初始化
- javascript - 如果后续的承诺将根据条件返回,如何使用承诺链?
- python - 仅在没有 linter 错误的情况下配置 VS Code 以执行 Python 脚本