layout(std430, binding = 9) buffer layoutName
{
uint dist[4 * 256];
+ uvec2 ransdist[4 * 256];
};
const uint prob_bits = 12;
// Apply corrections one by one, greedily, until we are at the exact right sum.
if (actual_sum > prob_scale) {
- float loss = -true_prob * log2(new_val / (new_val - 1));
+ float loss = true_prob * log2(new_val / float(new_val - 1));
voting_areas[i] = 0xffffffff;
memoryBarrierShared();
if (my_vote == voting_areas[vote_no]) {
--new_val;
- loss = -true_prob * log2(new_val / (new_val - 1));
+ loss = true_prob * log2(new_val / float(new_val - 1));
}
}
} else {
- float benefit = true_prob * log2(new_val / (new_val + 1));
+ float benefit = -true_prob * log2(new_val / float(new_val + 1));
voting_areas[i] = 0;
memoryBarrierShared();
if (my_vote == voting_areas[vote_no]) {
++new_val;
- benefit = true_prob * log2(new_val / (new_val + 1));
+ benefit = -true_prob * log2(new_val / float(new_val + 1));
}
}
}
memoryBarrierShared();
barrier();
+ new_val = new_dist[i];
+
for (uint layer = 2; layer <= 256; layer *= 2) {
if ((i & (layer - 1)) == layer - 1) {
new_dist[i] += new_dist[i - (layer / 2)];
memoryBarrierShared();
barrier();
}
- dist[base + i] = new_dist[i];
+ ransdist[base + i] = uvec2(new_dist[i] - new_val, new_val);
}