Alaba Posted April 17, 2018 Report Share Posted April 17, 2018 Hello there, I'm building a system that includes a large number of resistors. I used sc_vector of elements and nodes, as I increase the number of resistors I get segmentation error. The below example is a simpler form of my code that also gives the same error In the code below if I use small value of N: ( N=10000): I get the right result but for N=1048576: //(large N) I get: Segmentation fault (core dumped) ------------------------------------------------------resistors in series module---------------- // p- r0-r1-r2-r3...rN -n static const int N=1048576; sca_eln::sca_terminal n; sca_eln::sca_terminal p; sc_vector< sca_eln::sca_node > c_vec{"c_vec", N }; //nodes beteen resistors sc_vector<sca_eln::sca_r> rs_vec{"rs_vec", N }; SC_CTOR(rmatnn): p("p"),n("n") // { rs_vec[0].p(p); //connect p port of first resistor to main p port rs_vec[0].n(c_vec[0]); //connect n port of first resistor to nod 0 rs_vec[0 ].value=10; for (int i = 1; i < N-1; i++) { rs_vec[i ].p(c_vec[i-1]); rs_vec[i ].n(c_vec[i]); rs_vec[i ].value=10; } rs_vec[N-1 ].p(c_vec[N-2]); rs_vec[N-1 ].n(n); rs_vec[N-1 ].value=10; } }; Is there any limitations on the number of modules we use for the simulation?? Thanks in advance Quote Link to comment Share on other sites More sharing options...
karsten Posted April 17, 2018 Report Share Posted April 17, 2018 There is no real limitation except the available memory. Each resistor is a SystemC module which allocates some memory due the sc_module members. I guess SystemC and SystemC AMS does not check always, that memory could be allocated - thus you get the segfault. You can try a computer with more memory or try to setup the equation manually- for a resistive network this should be some lines of c code only - if you have inductors or capacitors you can use the state space or Ltf objects. Quote Link to comment Share on other sites More sharing options...
Alaba Posted April 18, 2018 Author Report Share Posted April 18, 2018 12 hours ago, karsten said: There is no real limitation except the available memory. Each resistor is a SystemC module which allocates some memory due the sc_module members. I guess SystemC and SystemC AMS does not check always, that memory could be allocated - thus you get the segfault. You can try a computer with more memory or try to setup the equation manually- for a resistive network this should be some lines of c code only - if you have inductors or capacitors you can use the state space or Ltf objects. I get same problem for same value of N with system of 32GB RAM and 8GB Ram Quote Link to comment Share on other sites More sharing options...
karsten Posted April 19, 2018 Report Share Posted April 19, 2018 I just saw, that it looks like you instantiate the modules statically. You may run into the OS stack size limitation. Allocate the modules/vectors dynamically (using new) may solves the problem (or at least increases the possible size). May you can try similiar like this (not checked): sc_vector< sca_eln::sca_node >* c_vec; //nodes beteen resistors sc_vector<sca_eln::sca_r>* rs_vec; SC_CTOR(rmatnn): p("p"),n("n") // { c_vec=new sc_vector< sca_eln::sca_node >("c_vec", N ); rs_vec=new sc_vector<sca_eln::sca_r>("rs_vec", N ); ... }; what are the shell messages before the segfault? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.