diff --git a/source/par2j/md5_crc.c b/source/par2j/md5_crc.c index 5ded3a3..ea7e729 100644 --- a/source/par2j/md5_crc.c +++ b/source/par2j/md5_crc.c @@ -1,5 +1,5 @@ // md5_crc.c -// Copyright : 2023-10-17 Yutaka Sawada +// Copyright : 2023-10-29 Yutaka Sawada // License : GPL #ifndef _UNICODE @@ -204,6 +204,8 @@ static unsigned int time_start, time1_start; static unsigned int time_total = 0, time2_total = 0, time3_total = 0; #endif +#define MAX_BUF_SIZE 2097152 // ヒープ領域を使う場合の最大サイズ + // ファイルのハッシュ値と各スライスのチェックサムを同時に計算する int file_hash_crc( wchar_t *file_name, // ハッシュ値を求めるファイル @@ -671,7 +673,7 @@ time1_start = GetTickCount(); } // バッファー・サイズが大きいのでヒープ領域を使う - for (io_size = IO_SIZE; io_size <= 1048576; io_size += IO_SIZE){ // 1 MB までにする + for (io_size = IO_SIZE; io_size <= MAX_BUF_SIZE; io_size += IO_SIZE){ // IO_SIZE の倍数にする if ((io_size + IO_SIZE > (cpu_cache & 0xFFFE0000)) || ((__int64)(io_size + IO_SIZE) * 4 > file_left)) break; } @@ -866,7 +868,7 @@ DWORD WINAPI file_hash_crc2(LPVOID lpParameter) // バッファー・サイズが大きいのでヒープ領域を使う prog_tick = 1; - for (io_size = IO_SIZE; io_size <= 1048576; io_size += IO_SIZE){ // IO_SIZE の倍数で 1 MB までにする + for (io_size = IO_SIZE; io_size <= MAX_BUF_SIZE; io_size += IO_SIZE){ // IO_SIZE の倍数にする if ((io_size + IO_SIZE > (cpu_cache & 0xFFFE0000)) || ((__int64)(io_size + IO_SIZE) * 4 > file_left)) break; prog_tick++; @@ -1303,7 +1305,7 @@ DWORD WINAPI file_hash_background(LPVOID lpParameter) find_next = files[num].b_off; // 先頭ブロックの番号 // バッファー・サイズが大きいのでヒープ領域を使う - for (io_size = IO_SIZE; io_size <= 1048576; io_size += IO_SIZE){ // IO_SIZE の倍数で 1 MB までにする + for (io_size = IO_SIZE; io_size <= MAX_BUF_SIZE; io_size += IO_SIZE){ // IO_SIZE の倍数にする if ((io_size + IO_SIZE > (cpu_cache & 0xFFFE0000)) || ((__int64)(io_size + IO_SIZE) * 4 > file_size)) break; } diff --git a/source/par2j/rs_decode.c b/source/par2j/rs_decode.c index 58505fa..a6a5538 100644 --- a/source/par2j/rs_decode.c +++ b/source/par2j/rs_decode.c @@ -1,5 +1,5 @@ // rs_decode.c -// Copyright : 2023-10-27 Yutaka Sawada +// Copyright : 2023-10-29 Yutaka Sawada // License : GPL #ifndef _UNICODE @@ -1704,11 +1704,11 @@ skip_count++; } else { // CPUスレッドが動作中なら、GPUスレッドを開始する src_num = (source_num - src_off) * gpu_end / (cpu_end + gpu_end); // 残りブロック数に対する割合 if (src_num < src_max){ - if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッド 1個の半分にする - src_num = (source_num - src_off) / (cpu_num2 * 2); + if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッドの 2倍まで + src_num = (source_num - src_off) / (cpu_num2 + 2); if (src_num < src_max){ src_num = src_max; - } else if (src_num > src_max * 2){ // ただし、CPUスレッド担当量の 2倍までに制限する + } else if (src_num > src_max * 2){ src_num = src_max * 2; } } else if (gpu_end * 2 < cpu_end){ // GPU が遅い場合は最低負担量も減らす @@ -2291,11 +2291,11 @@ time_read += GetTickCount() - time_start; } else { // CPUスレッドが動作中なら、GPUスレッドを開始する src_num = (read_num - src_off) * gpu_end / (cpu_end + gpu_end); // 残りブロック数に対する割合 if (src_num < src_max){ - if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッド 1個の半分にする - src_num = (read_num - src_off) / (cpu_num2 * 2); + if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッドの 2倍まで + src_num = (read_num - src_off) / (cpu_num2 + 2); if (src_num < src_max){ src_num = src_max; - } else if (src_num > src_max * 2){ // ただし、CPUスレッド担当量の 2倍までに制限する + } else if (src_num > src_max * 2){ src_num = src_max * 2; } } else if (gpu_end * 2 < cpu_end){ // GPU が遅い場合は最低負担量も減らす diff --git a/source/par2j/rs_encode.c b/source/par2j/rs_encode.c index 0831d56..98678e2 100644 --- a/source/par2j/rs_encode.c +++ b/source/par2j/rs_encode.c @@ -1,5 +1,5 @@ // rs_encode.c -// Copyright : 2023-10-27 Yutaka Sawada +// Copyright : 2023-10-29 Yutaka Sawada // License : GPL #ifndef _UNICODE @@ -1790,11 +1790,11 @@ skip_count++; } else { // CPUスレッドが動作中なら、GPUスレッドを開始する src_num = (source_num - src_off) * gpu_end / (cpu_end + gpu_end); // 残りブロック数に対する割合 if (src_num < src_max){ - if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッド 1個の半分にする - src_num = (source_num - src_off) / (cpu_num2 * 2); + if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッドの 2倍まで + src_num = (source_num - src_off) / (cpu_num2 + 2); if (src_num < src_max){ src_num = src_max; - } else if (src_num > src_max * 2){ // ただし、CPUスレッド担当量の 2倍までに制限する + } else if (src_num > src_max * 2){ src_num = src_max * 2; } } else if (gpu_end * 2 < cpu_end){ // GPU が遅い場合は最低負担量も減らす @@ -2435,11 +2435,11 @@ time_read += GetTickCount() - time_start; } else { // CPUスレッドが動作中なら、GPUスレッドを開始する src_num = (read_num - src_off) * gpu_end / (cpu_end + gpu_end); // 残りブロック数に対する割合 if (src_num < src_max){ - if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッド 1個の半分にする - src_num = (read_num - src_off) / (cpu_num2 * 2); + if (gpu_end == 0){ // 最初に負担するブロック数は CPUスレッドの 2倍まで + src_num = (read_num - src_off) / (cpu_num2 + 2); if (src_num < src_max){ src_num = src_max; - } else if (src_num > src_max * 2){ // ただし、CPUスレッド担当量の 2倍までに制限する + } else if (src_num > src_max * 2){ src_num = src_max * 2; } } else if (gpu_end * 2 < cpu_end){ // GPU が遅い場合は最低負担量も減らす