commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r4964 - gnuradio/branches/developers/eb/ibu/mblock/src


From: eb
Subject: [Commit-gnuradio] r4964 - gnuradio/branches/developers/eb/ibu/mblock/src/lib
Date: Wed, 11 Apr 2007 23:06:09 -0600 (MDT)

Author: eb
Date: 2007-04-11 23:06:09 -0600 (Wed, 11 Apr 2007)
New Revision: 4964

Modified:
   gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_protocol_class.cc
   
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
   gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_bitset.cc
   gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc
   gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.h
Log:
work-in-progress on mblocks.  Now passes fairly gnarly QA tests (60+ threads)

Modified: 
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_protocol_class.cc
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_protocol_class.cc     
2007-04-12 01:49:24 UTC (rev 4963)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_protocol_class.cc     
2007-04-12 05:06:09 UTC (rev 4964)
@@ -90,8 +90,10 @@
   while (1){
     pmt_t obj = pmt_deserialize(sb);
 
-    pmt_write(obj, std::cout);
-    std::cout << std::endl;
+    if (0){
+      pmt_write(obj, std::cout);
+      std::cout << std::endl;
+    }
 
     if (pmt_is_eof_object(obj))
       return;

Modified: 
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
===================================================================
--- 
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
   2007-04-12 01:49:24 UTC (rev 4963)
+++ 
gnuradio/branches/developers/eb/ibu/mblock/src/lib/mb_runtime_thread_per_block.cc
   2007-04-12 05:06:09 UTC (rev 4964)
@@ -111,32 +111,34 @@
    * FIXME probably ought to recode this to use a message queue
    * and state machine like the rest of the world ;)
    */
+
+  omni_mutex_lock l1(d_mutex);
+
   while (1){
+
     reap_dead_workers();
-    {
-      omni_mutex_lock l1(d_mutex);
-      if (d_workers.empty())   // no work left to do...
-       return;         
 
-      if (d_shutdown_requested && !d_shutdown_in_progress){
-       d_shutdown_in_progress = true;
+    if (d_workers.empty())     // no work left to do...
+      return;          
 
-       // FIXME state machine, delay before sending %halt
-       send_all_sys_msg(s_shutdown);
-       send_all_sys_msg(s_halt);
+    if (d_shutdown_requested && !d_shutdown_in_progress){
+      d_shutdown_in_progress = true;
 
-       continue;
-      }
+      // FIXME state machine, delay before sending %halt
+      send_all_sys_msg(s_shutdown);
+      send_all_sys_msg(s_halt);
 
-      d_runtime_cond.wait();   // wait for something to do.
+      continue;
     }
+
+    d_runtime_cond.wait();     // wait for something to do.
   }
 }
 
 void
 mb_runtime_thread_per_block::reap_dead_workers()
 {
-  omni_mutex_lock l1(d_mutex);
+  // omni_mutex_lock l1(d_mutex);
 
   for (worker_iter_t wi = d_workers.begin(); wi != d_workers.end(); ){
     bool is_dead;
@@ -150,10 +152,11 @@
       omni_mutex_lock l2((*wi)->d_mutex);
       is_dead = (*wi)->d_state == mb_worker::TS_DEAD;
     }
-      
+
     if (is_dead){
       if (0)
        std::cerr << "\nruntime: "
+                 << "(" << (*wi)->id() << ") "
                  << (*wi)->d_mblock->instance_name() << " is TS_DEAD\n";
       void *ignore;
       (*wi)->join(&ignore);
@@ -221,6 +224,11 @@
     d_workers.push_back(w);
   }
 
+  if (0)
+    std::cerr << "\nruntime: created "
+             << "(" << w->id() << ") "
+             << w->d_mblock->instance_name() << "\n";
+
   return w->d_mblock;
 }
 

Modified: gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_bitset.cc
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_bitset.cc     
2007-04-12 01:49:24 UTC (rev 4963)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_bitset.cc     
2007-04-12 05:06:09 UTC (rev 4964)
@@ -211,8 +211,8 @@
 
 class qa_bitset_src : public mb_mblock
 {
-  mb_port_sptr d_cs0;
-  mb_port_sptr d_cs1;
+  mb_port_sptr d_cs_top;
+  mb_port_sptr d_cs;
   
   mb_port_sptr d_out;
 
@@ -236,8 +236,8 @@
   d_nmsgs_to_send = pmt_to_long(pmt_nth(1, user_arg));
   d_batch_size    = pmt_to_long(pmt_nth(2, user_arg));
 
-  d_cs0 = define_port("cs0", "qa-bitset-cs", true, mb_port::EXTERNAL);
-  d_cs1 = define_port("cs1", "qa-bitset-cs", true, mb_port::EXTERNAL);
+  d_cs_top = define_port("cs_top", "qa-bitset-cs", true, mb_port::EXTERNAL);
+  d_cs = define_port("cs", "qa-bitset-cs", true, mb_port::EXTERNAL);
 
   d_out = define_port("out", "qa-bitset", true, mb_port::EXTERNAL);
 }
@@ -245,8 +245,8 @@
 void
 qa_bitset_src::handle_message(mb_message_sptr msg)
 {
-  if ((pmt_eq(msg->port_id(), d_cs0->port_symbol())
-       || pmt_eq(msg->port_id(), d_cs1->port_symbol()))
+  if ((pmt_eq(msg->port_id(), d_cs_top->port_symbol())
+       || pmt_eq(msg->port_id(), d_cs->port_symbol()))
       && pmt_eq(msg->signal(), s_send_batch)){
     send_batch();
   }
@@ -348,6 +348,8 @@
   long msg_number = pmt_to_long(pmt_car(msg->data()));
   uint32_t mask = pmt_to_long(pmt_cdr(msg->data()));
 
+  // std::cout << msg->data() << std::endl;
+
   d_nrecvd++;
   if (d_nrecvd % d_batch_size == d_batch_size - 1){
     d_cs0->send(s_send_batch);
@@ -383,3 +385,56 @@
 }
 
 REGISTER_MBLOCK_CLASS(qa_bitset_sink);
+
+// ------------------------------------------------------------------------
+
+class qa_bitset_top : public mb_mblock
+{
+  mb_port_sptr         d_cs0;
+  
+  long                 d_nmsgs;         // # of messages to send
+  long                 d_batch_size;    // # of messages to receive per batch
+
+public:
+  qa_bitset_top(mb_runtime *runtime, const std::string &instance_name, pmt_t 
user_arg);
+  void initial_transition();
+};
+
+qa_bitset_top::qa_bitset_top(mb_runtime *runtime,
+                            const std::string &instance_name, pmt_t user_arg)
+  : mb_mblock(runtime, instance_name, user_arg)
+{
+  d_nmsgs      = pmt_to_long(pmt_nth(0, user_arg));
+  d_batch_size = pmt_to_long(pmt_nth(1, user_arg));
+
+  d_cs0 = define_port("cs0", "qa-bitset-cs", false, mb_port::INTERNAL);
+  
+  // source of test messages
+  define_component("src0", "qa_bitset_src",
+                  pmt_list3(pmt_from_long(0),
+                            pmt_from_long(d_nmsgs),
+                            pmt_from_long(d_batch_size)));
+
+  // 32-mblock processing pipeline
+  define_component("pipeline", "qa_bitset32", pmt_from_long(0));
+
+  // sink for output of pipeline
+  define_component("sink", "qa_bitset_sink",
+                  pmt_list3(pmt_from_long(d_nmsgs),
+                            pmt_from_long(d_batch_size),
+                            pmt_from_long(0xffffffff)));
+
+  connect("self", "cs0", "src0", "cs_top");
+  connect("src0", "out", "pipeline", "in");
+  connect("src0", "cs", "sink", "cs0");
+  connect("pipeline", "out", "sink", "in0");
+}
+
+void
+qa_bitset_top::initial_transition()
+{
+  d_cs0->send(s_send_batch);   // prime the pump
+  d_cs0->send(s_send_batch);
+}
+
+REGISTER_MBLOCK_CLASS(qa_bitset_top);

Modified: gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc 
2007-04-12 01:49:24 UTC (rev 4963)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.cc 
2007-04-12 05:06:09 UTC (rev 4964)
@@ -230,11 +230,23 @@
 }
 
 // ================================================================
-//                       test_sys_3
+//                       test_bitset_1
 // ================================================================
 
 void
-qa_mblock_sys::test_sys_3()
+qa_mblock_sys::test_bitset_1()
 {
+  mb_runtime_sptr rt = mb_make_runtime();
+  pmt_t result = PMT_NIL;
+
+  long nmsgs =        1000;
+  long batch_size =      8;
+  
+  pmt_t arg = pmt_list2(pmt_from_long(nmsgs),  // # of messages to send 
through pipe
+                       pmt_from_long(batch_size));
+
+  rt->run("top", "qa_bitset_top", arg, &result);
+
+  CPPUNIT_ASSERT(pmt_equal(PMT_T, result));
 }
 

Modified: gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.h
===================================================================
--- gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.h  
2007-04-12 01:49:24 UTC (rev 4963)
+++ gnuradio/branches/developers/eb/ibu/mblock/src/lib/qa_mblock_sys.h  
2007-04-12 05:06:09 UTC (rev 4964)
@@ -30,13 +30,13 @@
   CPPUNIT_TEST_SUITE(qa_mblock_sys);
   CPPUNIT_TEST(test_sys_1);
   CPPUNIT_TEST(test_sys_2);
-  CPPUNIT_TEST(test_sys_3);
+  CPPUNIT_TEST(test_bitset_1);
   CPPUNIT_TEST_SUITE_END();
 
  private:
   void test_sys_1();
   void test_sys_2();
-  void test_sys_3();
+  void test_bitset_1();
 };
 
 #endif /* INCLUDED_QA_MBLOCK_SYS_H */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]