I am facing a new problem with running multithreaded applications compiled with m5threads on gem5 in SE mode. The application I am using has 4 threads and all 4 threads work on the same function. The application is a breadth first search algorithm which works on a large graph. So, I have 4 threads which do bfs independently. When I run this in gem5 SE mode, I see that the first thread is created and it does all the bfs work and the remaining 3 threads just get created and the program exits (I mean they don't do any work in the bfs function). I see this is something similar to sequential execution. I guess I am missing some command line argument but can't find what it is. I am using the default CPU which is AtomicSimpleCPU (as I don't use cpu argument) and use 4 cores (as I have 4 threads). Any help would be appreciated.
On Sat, Aug 7, 2021 at 9:10 PM Hossein Golestani <hosse...@umich.edu> wrote: > Hi Krishnan, > > The SE mode does not have any thread scheduler. You should have as many > cores as the maximum number threads your program may launch. In your > example, since your program has two threads, two cores are needed, each > running of the threads. > > Thanks, > Hossein > > > On Fri, Aug 6, 2021 at 5:16 AM krishnan gosakan < > krishnan.gosa...@gmail.com> wrote: > >> Seems like this problem arise only when number of cores is set to 1. >> When I increase the number of cores, I see that pthread_join is working >> perfectly. >> Not sure if this is kind of a limitation. >> Any idea? >> >> On Fri, Aug 6, 2021 at 11:16 AM krishnan gosakan < >> krishnan.gosa...@gmail.com> wrote: >> >>> Hi Hossein, >>> I used the m5thread_x86.o file and compiled my sample code (attached >>> with this mail). I used the following 2 commands to build my file >>> >>> gcc -g -O3 -c -o semodePthread.o semodePthread.c >>> gcc -static -o semodePthread semodePthread.o m5threads_x86.o >>> >>> By running semodePthread in gem5 se mode, I see that pthread_create is >>> succeeding but it gets stuck in pthread_join. Also I see printf in thread >>> function is not running. >>> Am I missing something? Or am I building it wrong? >>> ANy suggestions would be greatly appreciated. >>> >>> On Mon, Jul 26, 2021 at 2:03 AM Hossein Golestani <hosse...@umich.edu> >>> wrote: >>> >>>> [I'm resending my reply without the attachments in case they caused it >>>> to get into the spam folder.] >>>> >>>> Hi Krishnan, >>>> >>>> I remember that I also failed to build m5threads on a particular >>>> system, but I managed to build it on another system with a relatively old >>>> config (I have attached the output m5threads object files for x86 and ARM >>>> v7 to this email). If I remember correctly, that system had the Linux >>>> kernel 3.19 and gcc 4.8. You should be able to link the attached object >>>> file to your multi-threaded program compiled on a system with a newer >>>> kernel/compiler. Hope this helps. >>>> >>>> Thanks, >>>> Hossein >>>> >>>> >>>> On Sat, Jul 24, 2021 at 11:24 PM krishnan gosakan < >>>> krishnan.gosa...@gmail.com> wrote: >>>> >>>>> Hi Hossein, >>>>> I tried building m5threads but it failed. What system configuration >>>>> are you using to build m5threads? >>>>> What kernel version do you use and what compiler do you use? >>>>> >>>>> On Sat, Jul 24, 2021 at 10:28 PM Hossein Golestani <hosse...@umich.edu> >>>>> wrote: >>>>> >>>>>> Hi Krishnan, >>>>>> >>>>>> I use m5threads, which is a light-weight alternative for pthread, to >>>>>> simulate multi-threaded programs in the SE mode: >>>>>> https://github.com/gem5/m5threads >>>>>> (I'm not sure if there are any other ways.) >>>>>> >>>>>> Thanks, >>>>>> Hossein >>>>>> >>>>>> >>>>>> On Sat, Jul 24, 2021 at 11:00 AM krishnan gosakan via gem5-users < >>>>>> gem5-users@gem5.org> wrote: >>>>>> >>>>>>> Hi all, >>>>>>> I am trying to run a code with pthread in gem5 se mode. The code >>>>>>> runs perfectly when launched from command prompt but pthread_create >>>>>>> returns >>>>>>> error code 11 when run in se mode. Is there anything special I should >>>>>>> do to >>>>>>> make pthread run in se mode. From the tests directory, I see that C++ >>>>>>> std::thread is running perfectly in gem5 se mode. Any help would be >>>>>>> appreciated. >>>>>>> Thank you. >>>>>>> >>>>>>> Sample code I use in gem5 se mode >>>>>>> >>>>>>> #include <stdio.h> >>>>>>> #include <pthread.h> >>>>>>> >>>>>>> void *doWork1(void *arg) >>>>>>> { >>>>>>> for (int i=0; i<1000000000; i++) >>>>>>> ; >>>>>>> printf("work completed\n"); >>>>>>> } >>>>>>> >>>>>>> int main() >>>>>>> { >>>>>>> pthread_t thread; >>>>>>> int error = pthread_create(&thread, NULL, doWork1, NULL); >>>>>>> if (error == 0) >>>>>>> { >>>>>>> printf("thread created\n"); >>>>>>> pthread_join(thread, NULL); >>>>>>> printf("thread work complete\n"); >>>>>>> } >>>>>>> else >>>>>>> { >>>>>>> printf("error in thread creation %d\n",error); >>>>>>> } >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> -- >>>>>>> Regards, >>>>>>> Krishnan. >>>>>>> _______________________________________________ >>>>>>> gem5-users mailing list -- gem5-users@gem5.org >>>>>>> To unsubscribe send an email to gem5-users-le...@gem5.org >>>>>>> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s >>>>>> >>>>>> >>>>> >>>>> -- >>>>> Regards, >>>>> Krishnan. >>>>> >>>> >>> >>> -- >>> Regards, >>> Krishnan. >>> >> >> >> -- >> Regards, >> Krishnan. >> > -- Regards, Krishnan.
_______________________________________________ gem5-users mailing list -- gem5-users@gem5.org To unsubscribe send an email to gem5-users-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s