MCPcopy Index your code
hub / github.com/tensorflow/tfjs / uploadToGPU

Method uploadToGPU

tfjs-backend-webgpu/src/backend_webgpu.ts:733–780  ·  view source on GitHub ↗
(dataId: DataId)

Source from the content-addressed store, hash-verified

731 }
732
733 uploadToGPU(dataId: DataId): void {
734 const tensorData = this.tensorMap.get(dataId);
735 // Already on the GPU.
736 if (tensorData.resource != null) {
737 return;
738 }
739
740 const size = webgpu_util.GPUBytesPerElement(tensorData.dtype) *
741 util.sizeFromShape(tensorData.shape);
742 let buffer;
743 const usage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC |
744 GPUBufferUsage.COPY_DST;
745 if (tensorData.values) {
746 buffer = this.bufferManager.acquireBuffer(size, usage, true);
747 if (buffer.mapState === 'unmapped') {
748 const stagingBuffer = this.bufferManager.acquireBuffer(
749 size, GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, true,
750 false);
751 const arrayBuffer = stagingBuffer.getMappedRange();
752 if (tensorData.dtype === 'int32' || tensorData.dtype === 'bool') {
753 new Int32Array(arrayBuffer).set(tensorData.values as TypedArray);
754 } else {
755 new Float32Array(arrayBuffer).set(tensorData.values as Float32Array);
756 }
757 stagingBuffer.unmap();
758 this.ensureCommandEncoderReady();
759 this.endComputePassEncoder();
760 this.commandEncoder.copyBufferToBuffer(
761 stagingBuffer, 0, buffer, 0, size);
762
763 this.stagingPendingDisposal.push(stagingBuffer);
764 } else {
765 const arrayBuffer = buffer.getMappedRange();
766 if (tensorData.dtype === 'int32' || tensorData.dtype === 'bool') {
767 new Int32Array(arrayBuffer).set(tensorData.values as TypedArray);
768 } else {
769 new Float32Array(arrayBuffer).set(tensorData.values as Float32Array);
770 }
771 buffer.unmap();
772 }
773
774 // Once uploaded, don't store the values on cpu.
775 tensorData.values = null;
776 } else {
777 buffer = this.bufferManager.acquireBuffer(size, usage);
778 }
779 tensorData.resource = buffer;
780 }
781
782 private makeUniforms(programUniform: ProgramUniform): GPUBindingResource {
783 let currentOffset = 0;

Callers 3

runWebGPUProgramMethod · 0.95
fromPixelsFunction · 0.45

Calls 6

endComputePassEncoderMethod · 0.95
acquireBufferMethod · 0.80
getMethod · 0.45
setMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected