改critical零拷贝,性能+5%

This commit is contained in:
2026-08-03 11:15:22 +08:00
parent e9ae87465e
commit e1f18ab41e
5 changed files with 25 additions and 20 deletions
+18
View File
@@ -3,3 +3,21 @@
/input3/
/PngSuite-2017jul19.zip
/input/
/hs_err_pid22004.log
/hs_err_pid22004.mdmp
/hs_err_pid24748.log
/hs_err_pid24748.mdmp
/hs_err_pid31056.log
/hs_err_pid31056.mdmp
/hs_err_pid31060.log
/hs_err_pid31060.mdmp
/hs_err_pid33172.log
/hs_err_pid33172.mdmp
/hs_err_pid33180.log
/hs_err_pid33180.mdmp
/hs_err_pid33300.log
/hs_err_pid33300.mdmp
/hs_err_pid33776.log
/hs_err_pid33776.mdmp
/hs_err_pid5920.log
/hs_err_pid5920.mdmp
Binary file not shown.
+2 -2
View File
@@ -66,7 +66,7 @@ public class KIFCodec {
CompletableFuture<KIFCompressedImageBlock>f2=f1.thenApplyAsync((pipeline)->{
return pipeline.encodeStage2();
},cpupool);*/
return getBestPool().submit(()->{
return gpupool.submit(()->{
KIFEncodePipeline kip=new KIFEncodePipeline(input.get(), mode);
kip.encodeStage1();
return kip.encodeStage2();
@@ -122,7 +122,7 @@ public class KIFCodec {
throw new RuntimeException(e);
}
},gpupool);*/
return getBestPool().submit(()->{
return gpupool.submit(()->{
KIFDecodePipeline kip=new KIFDecodePipeline(input.get());
try {
kip.decodeStage1();
+4 -10
View File
@@ -53,9 +53,6 @@ public class KIFDecodePipeline {
return decodeStage2CPU();
}
}
private static ThreadLocal<MemorySegment>m1=ThreadLocal.withInitial(()->{
return ((ArenaImpl)Arena.ofAuto()).allocateNoInit(1024*1024*4,4);
});
private static ThreadLocalOpenCLMemory tlm0=new ThreadLocalOpenCLMemory(1024*1024*4);
private static ThreadLocalOpenCLMemory tlm1=new ThreadLocalOpenCLMemory(1024*1024*4);
@@ -69,13 +66,10 @@ public class KIFDecodePipeline {
OpenCLMemory ocm2 = null;
OpenCLMemory ocm3 = null;
int[]des;
MemorySegment dataserpseg= m1.get();
tdb.mark("堆外内存分配");
dataserpseg.asByteBuffer().put(dataserp).flip();
tdb.mark("堆内存->堆外内存");
ocm1=tlm0.get(oct.getOpenCLContext());
tdb.mark("分配显存");
oct.getOpenCLCommandQueue().executeWriteBuffer(ocm1, dataserpseg, false,0,0,dataserp.length);
ocm1=tlm0.get(oct.getOpenCLContext());
tdb.mark("分配显存");
oct.getOpenCLCommandQueue().executeWriteBuffer(ocm1, MemorySegment.ofArray(dataserp), true,0,0,dataserp.length);
tdb.mark("内存->显存");
OpenCLMemory dataser;
+1 -8
View File
@@ -80,10 +80,6 @@ public class KIFEncodePipeline {
}
private static ThreadLocal<MemorySegment>m1=ThreadLocal.withInitial(()->{
return ((ArenaImpl)Arena.ofAuto()).allocateNoInit(1024*1024*4,4);
});
private static ThreadLocalOpenCLMemory tlm0=new ThreadLocalOpenCLMemory(1024*1024*4);
private static ThreadLocalOpenCLMemory tlmpred1=new ThreadLocalOpenCLMemory(1024*1024*4);
private static ThreadLocalOpenCLMemory tlmpred2=new ThreadLocalOpenCLMemory(1024*1024*4);
@@ -96,7 +92,6 @@ public class KIFEncodePipeline {
OpenCLMemory ocm1 = null;
OpenCLMemory ocm2 = null;
OpenCLMemory ocm3 = null;
MemorySegment dataserpseg= m1.get();
tdb.mark("堆外内存分配");
//MemorySegment.copy(pixels,0,dataserpseg,0, pixels.byteSize());
tdb.mark("堆内存->堆外内存");
@@ -170,10 +165,8 @@ public class KIFEncodePipeline {
serialData2=MembandBoost.allocateUninitializedByteArray(width*height*4);
tdb.mark("分配堆内存");
oct.getOpenCLCommandQueue().executeReadBuffer(dataser, dataserpseg, true,0,0,width*height*4);
oct.getOpenCLCommandQueue().executeReadBuffer(dataser, MemorySegment.ofArray(serialData2), true,0,0,width*height*4);
tdb.mark("显存->内存");
MemorySegment.copy(dataserpseg, ValueLayout.JAVA_BYTE, 0, serialData2, 0,width*height*4);
tdb.mark("堆外内存->堆内存");
}
public KIFCompressedImageBlock encodeStage2() {