54 __attribute__((noinline))
57 vk::raii::CommandBuffer& cmdBuf,
58 std::shared_ptr<QueueHandle> queue)
60 AssertTypeIsAnalogWaveform(wfm);
64 const uint64_t numThreads = 16384;
69 size_t depth = wfm->size();
70 ReductionSumPushConstants push;
71 push.numSamples = depth;
72 push.numThreads = numThreads;
73 push.samplesPerThread = (depth + numThreads) / numThreads;
74 m_temporaryResults.
resize(numThreads);
76 m_computePipeline->BindBufferNonblocking(0, m_temporaryResults, cmdBuf,
true);
77 m_computePipeline->BindBufferNonblocking(1, wfm->m_samples, cmdBuf);
78 m_computePipeline->Dispatch(cmdBuf, push, numThreads, 1);
80 m_temporaryResults.MarkModifiedFromGpu();
83 queue->SubmitAndBlock(cmdBuf);
86 m_temporaryResults.PrepareForCpuAccess();
88 for(uint64_t i=0; i<numThreads; i++)
89 finalSum += m_temporaryResults[i];
91 return finalSum / depth;
95 std::unique_ptr<ComputePipeline> m_computePipeline;
void resize(size_t size, bool exactSize=false)
Change the usable size of the container.
Definition AcceleratorBuffer.h:679