mersenneforum.org  

Go Back   mersenneforum.org > Great Internet Mersenne Prime Search > Software

Reply
 
Thread Tools
Old 2017-02-23, 03:42   #1
Explorer09
 
May 2014

3·11 Posts
Default [Patch] CPU affinity prompt problem in mprime Linux / OS X build

[Patch] CPU affinity prompt problem in mprime Linux / OS X build

Steps to reproduce: suppose you have 2 CPU threads...

$ mv local.txt local.bak.txt
$ echo 'Affinity=98' >local.txt
$ mprime -m
(Choose "2. Test/Worker threads", then press Enter to accept default
for all questions and answer Y to "Accept the answers above", and then
choose "5. Test/Exit".)
$ grep Affinity local.txt
(Expected result: 'Affinity=98' unchanged)
(Actual result: 'Affinity=99' which means "any CPU" now instead of
specific CPU #98)

This off-by-one is ugly in asking CPU affinity from user. Suppose we label the
first CPU as #1 to user and second as #2 and so on, I would suggest using -1
and 0 for "any CPU" and "smart assignment" settings respecively here.

Also caps the (NUM_CPUS * CPU_HYPERTHREADS) number presented in question to 99,
because the local.txt format does not yet support pinning to 100th specific CPU
(CPU #99) or above.

Note: Windows GUI is not affected because it presents "any CPU" and
"smart assignment" as first of two items in the drop-down, avoiding the problem
that could happen in text prompt.

Code:
--- a/linux/menu.c	2016-09-15 10:15:10.000000000 +0800
+++ b/linux/menu.c	2017-02-23 11:00:36.432632390 +0800
@@ -450,16 +450,18 @@
 		}
 
 		if (NUM_CPUS * user_configurable_hyperthreads () > 1) {
-			char question[200];
-			unsigned long affinity;
+			char question[80];
+			long affinity;
+			int max_affinity;
+			max_affinity = NUM_CPUS * CPU_HYPERTHREADS >= 99U ? 99 : (int) (NUM_CPUS * CPU_HYPERTHREADS);
+			/* The values used in CPU_AFFINITY[] and local.txt are
+			 * 0-98=specific CPU, 99=any, 100=smart assignment */
 			sprintf (question,
-				 "CPU affinity (1-%d=specific CPU, 99=any CPU, 100=smart assignment)",
-				 (int) (NUM_CPUS * CPU_HYPERTHREADS));
-			affinity = m_affinity[i];
-			if (affinity < 99) affinity++;
-			askNum (question, &affinity, 1, 100);
-			if (affinity < 99) affinity--;
-			m_affinity[i] = affinity;
+				 "CPU affinity (1-%d=specific CPU, -1=any CPU, 0=smart assignment)",
+				 max_affinity);
+			affinity = m_affinity[i] >= 99 ? (long) m_affinity[i] - 100 : (long) m_affinity[i];
+			askInt (question, &affinity, -1, max_affinity);
+			m_affinity[i] = affinity < 1 ? affinity + 100 : affinity;
 		}
 
 		if (NUM_CPUS * user_configurable_hyperthreads () > 1) {
Explorer09 is offline   Reply With Quote
Old 2017-03-01, 02:34   #2
Prime95
P90 years forever!
 
Prime95's Avatar
 
Aug 2002
Yeehaw, FL

7,411 Posts
Default

Options for setting affinity have been completely reworked in 29.1 build 10. As a result the question with the special values is no longer asked.
Prime95 is offline   Reply With Quote
Reply

Thread Tools


Similar Threads
Thread Thread Starter Forum Replies Last Post
mprime messages line wrap problem (with patch) Explorer09 Software 5 2015-03-25 20:48
mprime (Linux) doesn't do "affinity" correctly... chalsall Software 16 2014-01-03 15:55
Problem with Windows Command Prompt M0CZY Lounge 20 2008-08-28 22:33
Affinity on Linux bmg9611 Software 5 2002-11-04 21:26
Linux mprime client v22.8 problem Prime Monster Software 6 2002-08-29 11:14

All times are UTC. The time now is 15:31.

Mon Apr 19 15:31:04 UTC 2021 up 11 days, 10:11, 0 users, load averages: 2.29, 2.01, 2.07

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.

This forum has received and complied with 0 (zero) government requests for information.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.
A copy of the license is included in the FAQ.