First Vulkan Relise

This commit is contained in:
2026-05-01 01:33:53 +07:00
parent e214ce10ed
commit 05875d8aa2
8 changed files with 300 additions and 352 deletions
+30 -10
View File
@@ -1,16 +1,36 @@
#version 450
layout(local_size_x = 1) in; // Запускаем 1 поток
layout(local_size_x = 256) in;
layout(std430, binding = 0) buffer InputBuffer {
float a;
float b;
} inputs;
layout(std430, binding = 0) buffer WeightBuffer { float weights[]; };
layout(std430, binding = 1) buffer BiasBuffer { float biases[]; };
layout(std430, binding = 2) buffer OutputBuffer { float outputs[]; };
layout(std430, binding = 3) buffer ErrorBuffer { float errors[]; };
layout(std430, binding = 1) buffer OutputBuffer {
float result;
} outputs;
layout(push_constant) uniform Params {
uint prevLayerSize;
uint nextLayerSize;
uint weightOffset;
uint biasOffset;
uint outOffset;
uint errOffset;
float lr;
} p;
void main() {
outputs.result = inputs.a * inputs.b;
}
uint j = gl_GlobalInvocationID.x; // Индекс нейрона следующего слоя
if (j < p.nextLayerSize) {
float errorTerm = p.lr * errors[p.errOffset + j];
// Обновляем веса, входящие в этот нейрон
for (uint k = 0; k < p.prevLayerSize; k++) {
uint wIdx = p.weightOffset + (j * p.prevLayerSize + k);
uint outIdx = p.outOffset + k;
weights[wIdx] += errorTerm * outputs[outIdx];
}
// Обновляем биас этого нейрона
biases[p.biasOffset + j] += errorTerm;
}
}