[Top][All Lists]
[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 */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r4964 - gnuradio/branches/developers/eb/ibu/mblock/src/lib,
eb <=