Comments (3)
I am able to fix the performance/memory consumption issue in the slang compiler for the given code snippets. However, using large arrays may still cause problems in the driver / downstream compiler and should be avoided if possible.
from slang.
I suspect the problem here is that spirv tools isn't designed to work with large arrays as SSA values.
To fix the problem and #4037, we need to not generate spirv code that is heavy on SSA registers for composite values.
We can have two separate passes to transform our IR where struct and arrays are passed via ssa values into pass by pointers to struct or arrays, and rewrite all ElementExtract into GetElementPointers.
Next, we need a pass to specialize all function calls by the address space of the arguments.
With these two transformations, we can generate spirv code that is free of ssa array and struct, which seems to be what spirv tools is designed to work with.
from slang.
In general, using large arrays anywhere in the shader code is likely going to cause both/either compiler and runtime performance issues. Consider using StructuredBuffer<T>
or just T*
instead of large arrays.
When the following code with DXC, I noticed similar behavior of long compile times and large memory usage:
struct WorkData
{
float A[2048* 2048];
float B[2048* 2048];
float Foo(uint i) { return A[i] * B[i]; }
};
ConstantBuffer<WorkData> input;
RWStructuredBuffer<float> resultBuffer;
[numthreads(2, 1, 1)]
void computeMain(uint tid: SV_DispatchThreadID)
{
resultBuffer[tid] = input.Foo( tid);
}
Consider the following instead:
struct WorkData {
float*A;
float*B.
};
struct PushData {
WorkData* Input;
float* Dest;
};
[vk::push_constant] ConstantBuffer<PushData> cb;
[numthreads(64, 1, 1)]
void ComputeMain(uint tid: SV_DispatchThreadID)
{
cb.Dest[tid] = cb.Input->A[tid] * cb.Input->B[tid];
}
from slang.
Related Issues (20)
- [MDL:4/5] Benchmark the runtime performance HOT 1
- [MDL:5/5] Add support for embedded precompiled library feature HOT 1
- Enable warnings-as-error on CI tests
- Slang parser incorrectly recognizes line continuations HOT 1
- slang not annotating array as restricted or aliased
- Capability System: Simplify CapabilitySet Diagnostic Printing
- Capability System: Fully define all capabilities meant for a user with 2 representations `_Internal_atom`/`External_atom` HOT 1
- Need further development of built-in interfaces
- Capability System: Simplify how we report incompatibilities of CapabilitySets to users
- Ignore CI when only `docs/proposal` is changed.
- `all` and/or `==` doesn't work as intended on metal. HOT 1
- ConstantBuffer inside a ParameterBlock breaks the compiler when targeting metal.
- AST: `CheckSwizzleExpr` can cause Stack around the variable 'elementIndices' was corrupted.
- AST: `CheckSwizzleExpr` can cause `Stack around the variable 'elementIndices' was corrupted` error
- Address compiler warnings HOT 2
- Reflection API: Allow querying backward and forward derivative methods for `public` methods that are also `[Differentiable]`
- Allow non-static methods on structs to be differentiated through `bwd_diff` and `fwd_diff`
- Reflection API: Allow lookups of derivative member decorations
- SPIRV validation error message is no longer printed
- DXIL validation errors with uninitialized fields
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from slang.