File src_c-Fix-multiple-size_t-issues-on-32b-systems.patch of Package imb
From be572ea07a91a5d500d8f9ebf942a9d3169b5f35 Mon Sep 17 00:00:00 2001
From: Nicolas Morey <nmorey@suse.com>
Date: Mon, 12 Aug 2024 14:48:58 +0200
Subject: [PATCH 1/1] src_c: Fix multiple size_t issues on 32b systems
- Use %zu to printf size_t. %PRIu64 is the wrong size on 32b systems
- Reduce IMB_P2P_MAX_MSG_LOG on 32b system to not overflow size_t
Signed-off-by: Nicolas Morey <nmorey@suse.com>
---
src_c/IMB_chk_diff.c | 16 ++++++++--------
src_c/IMB_mem_manager.c | 2 +-
src_c/P2P/imb_p2p.c | 10 +++++-----
src_c/P2P/imb_p2p.h | 5 +++++
src_c/P2P/imb_p2p_pingping.c | 2 +-
src_c/P2P/imb_p2p_pingpong.c | 2 +-
src_c/P2P/imb_p2p_unirandom.c | 2 +-
7 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/src_c/IMB_chk_diff.c b/src_c/IMB_chk_diff.c
index 899cf7700f68..80e716ee33ef 100644
--- a/src_c/IMB_chk_diff.c
+++ b/src_c/IMB_chk_diff.c
@@ -245,8 +245,8 @@ Input variables:
"Overall size = %I64u,"
" Portion = %I64u,"
#else
- "Overall size = %lu,"
- " Portion = %lu,"
+ "Overall size = %zu,"
+ " Portion = %zu,"
#endif /* WIN_IMB*/
" #sample= %d\n",
totlen, loclen, j_sample);
@@ -256,8 +256,8 @@ Input variables:
"Overall size = %I64u,"
" Portion = %I64u,"
#else
- "Overall size = %lu,"
- " Portion = %lu,"
+ "Overall size = %zu,"
+ " Portion = %zu,"
#endif /* WIN_IMB*/
" Startpos = %ld\n",
totlen, loclen, (long)Offset);
@@ -269,8 +269,8 @@ Input variables:
"Overall size = %I64u,"
" Portion = %I64u,"
#else
- "Overall size = %lu,"
- " Portion = %lu,"
+ "Overall size = %zu,"
+ " Portion = %zu,"
#endif /*WIN_IMB*/
" #sample= %d\n",
totlen, loclen, j_sample);
@@ -280,8 +280,8 @@ Input variables:
"Overall size = %I64u,"
" Portion = %I64u,"
#else
- "Overall size = %lu,"
- " Portion = %lu,"
+ "Overall size = %zu,"
+ " Portion = %zu,"
#endif /*WIN_IMB*/
" Startpos = %ld\n",
totlen, loclen, (long)Offset);
diff --git a/src_c/IMB_mem_manager.c b/src_c/IMB_mem_manager.c
index fb8b535b61f0..e62c0a838bed 100644
--- a/src_c/IMB_mem_manager.c
+++ b/src_c/IMB_mem_manager.c
@@ -149,7 +149,7 @@ Return value (type void*)
#ifdef WIN_IMB
" %I64u bytes\n",
#else
- " %lu bytes\n",
+ " %zu bytes\n",
#endif
where, size);
}
diff --git a/src_c/P2P/imb_p2p.c b/src_c/P2P/imb_p2p.c
index ab872e1888d2..f7f4dffd9566 100644
--- a/src_c/P2P/imb_p2p.c
+++ b/src_c/P2P/imb_p2p.c
@@ -66,7 +66,7 @@ void* imb_p2p_alloc_mem(size_t size) {
void *ptr = NULL;
int mpi_error = MPI_Alloc_mem(size, MPI_INFO_NULL, (void *)&ptr);
if ((mpi_error != MPI_SUCCESS) || (ptr == NULL)) {
- fprintf(unit, "[%d] MPI_Alloc_mem(%" PRIu64 ") error %d, ptr=%p\n",
+ fprintf(unit, "[%d] MPI_Alloc_mem(%zu) error %d, ptr=%p\n",
imb_p2p_config.rank, size, mpi_error, ptr);
fflush(unit);
exit(10);
@@ -247,8 +247,8 @@ static void print_main_header(int argc, char **argv) {
fprintf(unit, "# %s\n", imb_p2p_config.benchmarks.array[j].name);
}
fprintf(unit, "#\n");
- fprintf(unit, "# Minimum message length in bytes: %" PRIu64 "\n", imb_p2p_config.messages.min_size);
- fprintf(unit, "# Maximum message length in bytes: %" PRIu64 "\n", imb_p2p_config.messages.max_size);
+ fprintf(unit, "# Minimum message length in bytes: %zu\n", imb_p2p_config.messages.min_size);
+ fprintf(unit, "# Maximum message length in bytes: %zu\n", imb_p2p_config.messages.max_size);
fprintf(unit, "#\n");
fflush(unit);
}
@@ -302,7 +302,7 @@ static void free_messages(void) {
static void add_message(size_t size) {
if (!imb_p2p_config.messages.array) {
- imb_p2p_config.messages.min_size = ((size_t)1) << IMB_P2P_MAX_MSG_LOG;
+ imb_p2p_config.messages.min_size = (1ULL) << IMB_P2P_MAX_MSG_LOG;
imb_p2p_config.messages.max_size = 0;
imb_p2p_config.messages.length = 0;
imb_p2p_config.messages.capacity = 512;
@@ -665,7 +665,7 @@ static void loading(int argc, char **argv) {
fprintf(unit, "# number_of_iterations = (numerator * 1024 * 1024) / size\n");
fprintf(unit, "# number_of_iterations <= max\n");
fprintf(unit, "# number_of_iterations >= 1\n");
- fprintf(unit, "# Default -iter %" PRIu64 ",%" PRIu64 "\n", imb_p2p_config.iter.max, (imb_p2p_config.iter.numerator / (1024 * 1024)));
+ fprintf(unit, "# Default -iter %zu,%zu\n", imb_p2p_config.iter.max, (imb_p2p_config.iter.numerator / (1024 * 1024)));
fprintf(unit, "#\n");
exit(0);
} else if (!STRCASECMP(argv[i], "msglen") || !STRCASECMP(argv[i], "-msglen")) {
diff --git a/src_c/P2P/imb_p2p.h b/src_c/P2P/imb_p2p.h
index 98d54653c7ec..e9e4254ff125 100644
--- a/src_c/P2P/imb_p2p.h
+++ b/src_c/P2P/imb_p2p.h
@@ -54,7 +54,12 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define IMB_P2P_CACHE_LINE_LEN (64)
#define IMB_P2P_DEFAULT_MAX_MESSAGE_SIZE (4 * 1024 * 1024)
#define IMB_P2P_BARRIER_TAG 1000
+#if __SIZEOF_SIZE_T__ == 8
#define IMB_P2P_MAX_MSG_LOG 47
+#else
+#define IMB_P2P_MAX_MSG_LOG 31
+#endif
+
#define IMB_P2P_PINGPONG "PingPong"
#define IMB_P2P_PINGPING "PingPing"
#define IMB_P2P_UNIRANDOM "Unirandom"
diff --git a/src_c/P2P/imb_p2p_pingping.c b/src_c/P2P/imb_p2p_pingping.c
index a8a9a9892b0e..d24dc5f2a61d 100644
--- a/src_c/P2P/imb_p2p_pingping.c
+++ b/src_c/P2P/imb_p2p_pingping.c
@@ -100,7 +100,7 @@ void imb_p2p_pingping(void) {
bandwidth = ((number_of_iterations * nranks * size) / (1000000.0 * max_time));
message_rate = ((number_of_iterations * nranks) / max_time);
latency = (1000000.0 * aggregate_time) / (number_of_iterations * nranks);
- fprintf(unit, " %12" PRIu64 " %12" PRIu64 " %12.2f %12.2f %12.0f\n", size, number_of_iterations, latency, bandwidth, message_rate);
+ fprintf(unit, " %12zu %12zu %12.2f %12.2f %12.0f\n", size, number_of_iterations, latency, bandwidth, message_rate);
fflush(unit);
}
}
diff --git a/src_c/P2P/imb_p2p_pingpong.c b/src_c/P2P/imb_p2p_pingpong.c
index f36926ed6ec7..a86288d22877 100644
--- a/src_c/P2P/imb_p2p_pingpong.c
+++ b/src_c/P2P/imb_p2p_pingpong.c
@@ -120,7 +120,7 @@ void imb_p2p_pingpong(void) {
bandwidth = ((number_of_iterations * nranks * size) / (1000000.0 * max_time));
message_rate = ((number_of_iterations * nranks) / (max_time));
latency = (1000000.0 * aggregate_time) / (2 * number_of_iterations * nranks);
- fprintf(unit, " %12" PRIu64 " %12" PRIu64 " %12.2f %12.2f %12.0f\n", size, number_of_iterations, latency, bandwidth, message_rate);
+ fprintf(unit, " %12zu %12zu %12.2f %12.2f %12.0f\n", size, number_of_iterations, latency, bandwidth, message_rate);
fflush(unit);
}
}
diff --git a/src_c/P2P/imb_p2p_unirandom.c b/src_c/P2P/imb_p2p_unirandom.c
index 310933cd275c..2381d593b10f 100644
--- a/src_c/P2P/imb_p2p_unirandom.c
+++ b/src_c/P2P/imb_p2p_unirandom.c
@@ -123,7 +123,7 @@ void imb_p2p_unirandom(void) {
message_rate = (aggregate_number_of_messages / max_time);
bandwidth = ((aggregate_number_of_messages * size) / (1000000.0 * max_time));
latency = (1000000.0 * aggregate_time) / aggregate_number_of_messages;
- fprintf(unit, " %12" PRIu64 " %12" PRIu64 " %12.2f %12.2f %12.0f\n", size, number_of_iterations, latency, bandwidth, message_rate);
+ fprintf(unit, " %12zu %12zu %12.2f %12.2f %12.0f\n", size, number_of_iterations, latency, bandwidth, message_rate);
fflush(unit);
}
}
--
2.45.2.1.g5c866cf9507b