From 01eab0c7e283db9c1cfff0a26296a49128062cca Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Wed, 19 Dec 2012 13:38:24 -0500
Subject: core: working thread affinity concept into gr_blocks.

Example in gnuradio-core/src/examples/mp-sched/affinity_set.py

Documentation describing API in docs/doxygen/other/thread_affinity.dox
---
 gnuradio-core/src/examples/mp-sched/CMakeLists.txt |  1 +
 .../src/examples/mp-sched/affinity_set.py          | 73 ++++++++++++++++++++++
 2 files changed, 74 insertions(+)
 create mode 100755 gnuradio-core/src/examples/mp-sched/affinity_set.py

(limited to 'gnuradio-core/src/examples')

diff --git a/gnuradio-core/src/examples/mp-sched/CMakeLists.txt b/gnuradio-core/src/examples/mp-sched/CMakeLists.txt
index dc47d17f9..d2d910ecf 100644
--- a/gnuradio-core/src/examples/mp-sched/CMakeLists.txt
+++ b/gnuradio-core/src/examples/mp-sched/CMakeLists.txt
@@ -20,6 +20,7 @@
 include(GrPython)
 
 GR_PYTHON_INSTALL(PROGRAMS
+  affinity_set.py
   plot_flops.py
   run_synthetic.py
   synthetic.py
diff --git a/gnuradio-core/src/examples/mp-sched/affinity_set.py b/gnuradio-core/src/examples/mp-sched/affinity_set.py
new file mode 100755
index 000000000..b34477d14
--- /dev/null
+++ b/gnuradio-core/src/examples/mp-sched/affinity_set.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+##################################################
+# Gnuradio Python Flow Graph
+# Title: Affinity Set Test
+##################################################
+
+from gnuradio import eng_notation
+from gnuradio import gr
+from gnuradio.eng_option import eng_option
+from gnuradio.gr import firdes
+from optparse import OptionParser
+import sys
+
+class affinity_set(gr.top_block):
+
+    def __init__(self):
+        gr.top_block.__init__(self, "Affinity Set Test")
+
+        ##################################################
+	# Variables
+	##################################################
+	self.samp_rate = samp_rate = 32000
+
+	##################################################
+	# Blocks
+	##################################################
+        vec_len = 1
+	self.gr_throttle_0 = gr.throttle(gr.sizeof_gr_complex*vec_len, samp_rate)
+	self.gr_null_source_0 = gr.null_source(gr.sizeof_gr_complex*vec_len)
+	self.gr_null_sink_0 = gr.null_sink(gr.sizeof_gr_complex*vec_len)
+	self.gr_filt_0 = gr.fir_filter_ccc(1, 40000*[0.2+0.3j,])
+	self.gr_filt_1 = gr.fir_filter_ccc(1, 40000*[0.2+0.3j,])
+
+	self.gr_filt_0.set_processor_affinity([0,])
+	self.gr_filt_1.set_processor_affinity([1,2])
+		
+	##################################################
+	# Connections
+	##################################################
+	self.connect((self.gr_null_source_0, 0), (self.gr_throttle_0, 0))
+	self.connect((self.gr_throttle_0, 0), (self.gr_filt_0, 0))
+	self.connect((self.gr_filt_0, 0), (self.gr_filt_1, 0))
+	self.connect((self.gr_filt_1, 0), (self.gr_null_sink_0, 0))
+
+
+	# QT sink close method reimplementation
+
+    def get_samp_rate(self):
+        return self.samp_rate
+
+    def set_samp_rate(self, samp_rate):
+        self.samp_rate = samp_rate
+
+if __name__ == '__main__':
+    parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
+    (options, args) = parser.parse_args()
+    tb = affinity_set()
+    tb.start()
+	
+    while(1):
+        ret = raw_input('Press Enter to quit: ')
+	if(len(ret) == 0):
+            tb.stop()
+	    sys.exit(0)
+        elif(ret.lower() == "none"):
+            tb.gr_filt_0.unset_processor_affinity()
+	else:
+            try:
+                n = int(ret)
+	    except ValueError:
+                print "Invalid number"
+	    else:
+                tb.gr_filt_0.set_processor_affinity([n,])
-- 
cgit v1.2.3


From e532342c4b67b10f180f4da5b5ab6c89ea3179f0 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Thu, 7 Feb 2013 11:05:08 -0500
Subject: core: thread affinity example core set changed.

The affinity call will work if at least 1 of the specified cores is present. This fixes a problem if running on a single-core machine.
---
 gnuradio-core/src/examples/mp-sched/affinity_set.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'gnuradio-core/src/examples')

diff --git a/gnuradio-core/src/examples/mp-sched/affinity_set.py b/gnuradio-core/src/examples/mp-sched/affinity_set.py
index b34477d14..6db632e0f 100755
--- a/gnuradio-core/src/examples/mp-sched/affinity_set.py
+++ b/gnuradio-core/src/examples/mp-sched/affinity_set.py
@@ -32,7 +32,7 @@ class affinity_set(gr.top_block):
 	self.gr_filt_1 = gr.fir_filter_ccc(1, 40000*[0.2+0.3j,])
 
 	self.gr_filt_0.set_processor_affinity([0,])
-	self.gr_filt_1.set_processor_affinity([1,2])
+	self.gr_filt_1.set_processor_affinity([0,1])
 		
 	##################################################
 	# Connections
-- 
cgit v1.2.3