zstdmt : refactor job members

grouped by sharing properties
This commit is contained in:
Yann Collet
2018-01-26 10:20:38 -08:00
parent 777d3c1559
commit 8e128eaf05
3 changed files with 25 additions and 24 deletions
+4 -3
View File
@@ -926,7 +926,7 @@ size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* prefix, size_t
</p></pre><BR> </p></pre><BR>
<pre><b>typedef enum { <pre><b>typedef enum {
ZSTD_e_continue=0, </b>/* collect more data, encoder transparently decides when to output result, for optimal conditions */<b> ZSTD_e_continue=0, </b>/* collect more data, encoder decides when to output compressed result, for optimal conditions */<b>
ZSTD_e_flush, </b>/* flush any data provided so far - frame will continue, future data can still reference previous data for better compression */<b> ZSTD_e_flush, </b>/* flush any data provided so far - frame will continue, future data can still reference previous data for better compression */<b>
ZSTD_e_end </b>/* flush any remaining data and close current frame. Any additional data starts a new frame. */<b> ZSTD_e_end </b>/* flush any remaining data and close current frame. Any additional data starts a new frame. */<b>
} ZSTD_EndDirective; } ZSTD_EndDirective;
@@ -945,10 +945,11 @@ size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* prefix, size_t
and then immediately returns, just indicating that there is some data remaining to be flushed. and then immediately returns, just indicating that there is some data remaining to be flushed.
The function nonetheless guarantees forward progress : it will return only after it reads or write at least 1+ byte. The function nonetheless guarantees forward progress : it will return only after it reads or write at least 1+ byte.
- Exception : in multi-threading mode, if the first call requests a ZSTD_e_end directive, it is blocking : it will complete compression before giving back control to caller. - Exception : in multi-threading mode, if the first call requests a ZSTD_e_end directive, it is blocking : it will complete compression before giving back control to caller.
- @return provides the minimum amount of data remaining to be flushed from internal buffers - @return provides a minimum amount of data remaining to be flushed from internal buffers
or an error code, which can be tested using ZSTD_isError(). or an error code, which can be tested using ZSTD_isError().
if @return != 0, flush is not fully completed, there is still some data left within internal buffers. if @return != 0, flush is not fully completed, there is still some data left within internal buffers.
This is useful to determine if a ZSTD_e_flush or ZSTD_e_end directive is completed. This is useful for ZSTD_e_flush, since in this case more flushes are necessary to empty all buffers.
For ZSTD_e_end, @return == 0 when internal buffers are fully flushed and frame is completed.
- after a ZSTD_e_end directive, if internal buffer is not fully flushed (@return != 0), - after a ZSTD_e_end directive, if internal buffer is not fully flushed (@return != 0),
only ZSTD_e_end or ZSTD_e_flush operations are allowed. only ZSTD_e_end or ZSTD_e_flush operations are allowed.
Before starting a new compression job, or changing compression parameters, Before starting a new compression job, or changing compression parameters,
+19 -19
View File
@@ -300,28 +300,28 @@ static void ZSTDMT_releaseCCtx(ZSTDMT_CCtxPool* pool, ZSTD_CCtx* cctx)
/* ------------------------------------------ */ /* ------------------------------------------ */
/* ===== Thread worker ===== */ /* ===== Worker thread ===== */
/* ------------------------------------------ */ /* ------------------------------------------ */
typedef struct { typedef struct {
buffer_t src; size_t consumed; /* SHARED - init0 by mtctx, then modified by worker AND read by mtctx */
const void* srcStart; size_t cSize; /* SHARED - init0 by mtctx, then modified by worker AND read by mtctx */
size_t prefixSize; ZSTD_pthread_mutex_t* mtctx_mutex; /* Thread-safe - used by mtctx and (all) worker */
size_t srcSize; ZSTD_pthread_cond_t* mtctx_cond; /* Thread-safe - used by mtctx and (all) worker */
size_t consumed; ZSTDMT_CCtxPool* cctxPool; /* Thread-safe - used by mtctx and (all) worker */
buffer_t dstBuff; ZSTDMT_bufferPool* bufPool; /* Thread-safe - used by mtctx and (all) worker */
size_t cSize; buffer_t dstBuff; /* set by worker (or mtctx), then read by worker, then modified by mtctx => no barrier */
size_t dstFlushed; buffer_t src; /* set by mtctx, then modified by worker => no barrier */
unsigned firstChunk; const void* srcStart; /* set by mtctx, then read by worker => no barrier */
unsigned lastChunk; size_t prefixSize; /* set by mtctx, then read by worker => no barrier */
unsigned frameChecksumNeeded; size_t srcSize; /* set by mtctx, then read by worker => no barrier */
ZSTD_pthread_mutex_t* mtctx_mutex; unsigned firstChunk; /* set by mtctx, then read by worker => no barrier */
ZSTD_pthread_cond_t* mtctx_cond; unsigned lastChunk; /* set by mtctx, then read by worker => no barrier */
ZSTD_CCtx_params params; ZSTD_CCtx_params params; /* set by mtctx, then read by worker => no barrier */
const ZSTD_CDict* cdict; const ZSTD_CDict* cdict; /* set by mtctx, then read by worker => no barrier */
ZSTDMT_CCtxPool* cctxPool; unsigned long long fullFrameSize; /* set by mtctx, then read by worker => no barrier */
ZSTDMT_bufferPool* bufPool; size_t dstFlushed; /* used only by mtctx */
unsigned long long fullFrameSize; unsigned frameChecksumNeeded; /* used only by mtctx */
} ZSTDMT_jobDescription; } ZSTDMT_jobDescription;
/* ZSTDMT_compressChunk() is a POOL_function type */ /* ZSTDMT_compressChunk() is a POOL_function type */
+2 -2
View File
@@ -1220,9 +1220,9 @@ static int fuzzerTests_MT(U32 seed, U32 nbTests, unsigned startTest, double comp
FUZ_rand(&coreSeed); FUZ_rand(&coreSeed);
if (nbTests >= testNb) { if (nbTests >= testNb) {
DISPLAYUPDATE(2, "\r%6u/%6u (%08X) ", testNb, nbTests, coreSeed); DISPLAYUPDATE(2, "\r%6u/%6u ", testNb, nbTests);
} else { } else {
DISPLAYUPDATE(2, "\r%6u (%08X) ", testNb, coreSeed); DISPLAYUPDATE(2, "\r%6u ", testNb);
} }
lseed = coreSeed ^ prime32; lseed = coreSeed ^ prime32;