Hi Jameson Nash,
Thanks for reply, pointers provided by you on debugging are really helpful. I am going to try it out and figuring out what more changes I need to make to build Julia on ppc64le architecture. Apologies for late reply as I was a bit occupied. -Mahesh On Wed, Jul 15, 2015 at 11:19 AM, Jameson Nash <[email protected]> wrote: > I had at one point fairly recently (back in February, I think) shown that > it should be possible to run julia on the ppc64le hardware. However, ports > are time consuming and difficult to maintain (I don't own a PPC computer > for one thing). Julia Computing could help with a port if interested. > > For community support, there is a dedicated tag in the issue tracker for > helping organize anyone working on that platform ( > https://github.com/JuliaLang/julia/issues?q=is%3Aopen+is%3Aissue+label%3APower) > share issues. > > For debugging tips, I would continue with the general gdb work you were > doing and try to determine why it hasn't blocked in the libuv `uv_run` > function. I recommend using julia-debug so that you can see locals, and > walk the stack, using `print jl_(f->linfo)`, and `print jl_(args[0])`, etc > to figure out where exactly in the program initialization it got stuck. > > > On Fri, Jul 3, 2015 at 10:05 AM Mahesh Waidande < > [email protected]> wrote: > >> Hi All, >> >> I am working on building/porting Julia on ppc64le architecture. I am >> using Ubuntu 14.10 on top of ppc64le hardware >> and I am able to build/compile Julia master branch on it. When I execute >> julia binary, it goes into indefinite wait and >> I am not able to view julia prompt .Any pointer on this strange behavior >> would be great help. >> >> Below is some background information which will help to understand/ >> resolve a problem. >> >> 1. Machine details : >> >> test@pts00433-vm1:~/Mahesh/julia/julia$ uname -a >> Linux pts00433-vm1 3.16.0-30-generic #40-Ubuntu SMP Mon Jan 12 22:07:11 >> UTC 2015 ppc64le ppc64le ppc64le GNU/Linux >> test@pts00433-vm1:~/Mahesh/julia/julia$ >> >> >> 2. Content of Make.user file >> >> test@pts00433-vm1:~/Mahesh/julia/julia$ cat Make.user >> include /home/test/Mahesh/julia/julia/Make.powerpc >> >> # __PPC64__ defined but __ppc64__ is not! >> CFLAGS += -D__ppc64__ >> CXXFLAGS += -D__ppc64__ >> LDFLAGS = -llzma >> VERBOSE = 1 >> test@pts00433-vm1:~/Mahesh/julia/julia$ >> >> 3. Content of Make.powerpc file >> >> test@pts00433-vm1:~/Mahesh/julia/julia$ cat Make.powerpc >> # This Make.ppc script should help you get started building Julia on a >> PowerPC machine >> # $ echo "include $(JULIAHOME)/Make.powerpc" >> Make.user >> >> # most of our dependencies these contain m4 scripts that are too old >> (specifically libtool.m4) to know about ppc64le >> # so for now, we must use the system ones >> USE_SYSTEM_FFTW=1 >> USE_SYSTEM_PCRE=0 >> USE_SYSTEM_ARPACK=1 >> USE_SYSTEM_GMP=1 >> USE_SYSTEM_MPFR=1 >> >> # openblas doesn't know about ld version 2 assembly PROLOGUE syntax >> USE_SYSTEM_BLAS=1 >> >> # it's not optimized, and we trust the system libm >> USE_SYSTEM_LIBM=1 >> >> # this one doesn't seem to be able to compile for assembly code >> USE_SYSTEM_LIBUNWIND=1 >> >> # this one takes awhile to build, but it's generally worthwhile -- your >> choice >> USE_SYSTEM_LLVM?=0 >> ifeq ($(USE_SYSTEM_LLVM),1) >> LLVM_CONFIG=llvm-config-3.5 >> else >> LLVM_ASSERTIONS=1 >> LLVM_VER=3.6.0 >> LLVM_ASSERTIONS=1 >> endif >> >> # On a newly allocated machine, you'll need the following dependencies: >> # build essentials: >> # $ sudo apt-get install git g++ gfortran make cmake libedit-dev >> zlib1g-dev libssl-dev >> # system lib replacements: >> # $ sudo apt-get install libfftw3-dev libunwind8-dev libllvm3.5 libblas3 >> libarpack2-dev libedit-dev libpcre3-dev libgmp-dev libmpfr-dev >> # autogen essentials: >> # $ sudo apt-get install libtool autoconf >> test@pts00433-vm1:~/Mahesh/julia/julia$ >> >> >> 4. While compiling below code snippet I was getting segmentation fault. >> For resolving segmentation fault I made changes >> in ‘options.h’ file, I turn on ‘MEMDEBUG’ flag in ‘options.h’ file. >> >> julia/usr/bin/julia -C native --output-o >> /home/test/Mahesh/julia/julia/usr/lib/julia/inference0.o -f coreimg.jl >> >> diff of ‘options.h’ file, >> >> test@pts00433-vm1:~/Mahesh/julia/julia$ git diff src/options.h >> diff --git a/src/options.h b/src/options.h >> index 23540ae..e2318cb 100644 >> --- a/src/options.h >> +++ b/src/options.h >> @@ -40,7 +40,7 @@ >> // with MEMDEBUG, every object is allocated explicitly with malloc, and >> // filled with 0xbb before being freed. this helps tools like valgrind >> // catch invalid accesses. >> -// #define MEMDEBUG >> +#define MEMDEBUG >> >> // GC_VERIFY force a full verification gc along with every quick gc to >> ensure no >> // reachable memory is freed >> test@pts00433-vm1:~/Mahesh/julia/julia$ >> >> >> 5. I attached gdb to Julia and try to find out the reason why I am not >> getting Julia command prompt. >> Below is stacktrace of gdb. >> >> test@pts00433-vm1:~/Mahesh/julia/julia$ gdb ./julia >> (gdb) r >> Starting program: /home/test/Mahesh/julia/julia/julia >> [Thread debugging using libthread_db enabled] >> Using host libthread_db library >> "/lib/powerpc64le-linux-gnu/libthread_db.so.1". >> _ >> _ _ _(_)_ | A fresh approach to technical computing >> (_) | (_) (_) | Documentation: http://docs.julialang.org >> _ _ _| |_ __ _ | Type "help()" for help. >> | | | | | | |/ _` | | >> | | |_| | | | (_| | | Version 0.4.0-dev+5769 (2015-07-03 04:36 UTC) >> _/ |\__'_|_|_|\__'_| | Commit 2c1ac18* (0 days old master) >> |__/ | powerpc64le-linux-gnu >> >> ^C >> Program received signal SIGINT, Interrupt. >> 0x00003fffb6a138fc in __pause_nocancel () at >> ../sysdeps/unix/syscall-template.S:81 >> 81 ../sysdeps/unix/syscall-template.S: No such file or directory. >> (gdb) bt >> #0 0x00003fffb6a138fc in __pause_nocancel () at >> ../sysdeps/unix/syscall-template.S:81 >> #1 0x00003fffb4f5fb10 in julia_wait_18019 () at task.jl:302 >> #2 0x00003fffb4f69bc4 in julia_wait_18197 (c=<optimized out>) at >> task.jl:225 >> #3 0x00003fffb6c00330 in jl_apply (nargs=1, args=0x3fffffffef38, >> f=0x12c5e370) at julia.h:1260 >> #4 jl_trampoline (F=0x12c5e370, args=0x3fffffffef38, nargs=<optimized >> out>) at builtins.c:975 >> #5 0x00003fffb6bf1b00 in jl_apply (nargs=1, args=0x3fffffffef38, >> f=<optimized out>) at julia.h:1260 >> #6 jl_apply_generic (F=0x12c59b00, args=0x3fffffffef38, nargs=<optimized >> out>) at gf.c:1632 >> #7 0x00003fffb2c60088 in julia_anonymous_24015 () >> #8 0x00003fffb6c00330 in jl_apply (nargs=0, args=0x0, f=0x12a77d30) at >> julia.h:1260 >> #9 jl_trampoline (F=0x12a77d30, args=0x0, nargs=<optimized out>) at >> builtins.c:975 >> #10 0x00003fffb6b04640 in jl_apply (nargs=0, args=0x0, f=<optimized out>) >> at julia.h:1260 >> #11 start_task () at task.c:232 >> #12 0x00003fffb6c66f10 in set_base_ctx (__stk=<optimized out>) at >> task.c:241 >> #13 0x0000000000000000 in ?? () >> (gdb) >> >> >> *** Please observe above frame 2 and 3 and which will clearly shows that >> ./julia binary is in infinite wait. >> >> Here is code snippet of task.jl file, >> >> test@pts00433-vm1:~/Mahesh/julia/julia$ cat -n ./base/task.jl | head -n >> 234 | tail -18 >> 217 >> 218 function wait(c::Condition) >> 219 ct = current_task() >> 220 >> 221 ct.state = :waiting >> 222 push!(c.waitq, ct) >> 223 >> 224 try >> 225 return wait() >> 226 catch >> 227 filter!(x->x!==ct, c.waitq) >> 228 if ct.state == :waiting >> 229 ct.state = :runnable >> 230 end >> 231 rethrow() >> 232 end >> 233 end >> 234 >> test@pts00433-vm1:~/Mahesh/julia/julia$ >> >> test@pts00433-vm1:~/Mahesh/julia/julia$ cat -n ./base/task.jl | head -n >> 317 | tail -24 >> 294 >> 295 function wait() >> 296 while true >> 297 if isempty(Workqueue) >> 298 c = process_events(true) >> 299 if c==0 && eventloop()!=C_NULL && isempty(Workqueue) >> 300 # if there are no active handles and no runnable >> tasks, just >> 301 # wait for signals. >> 302 pause() >> 303 end >> 304 else >> 305 t = shift!(Workqueue) >> 306 arg = t.result >> 307 t.result = nothing >> 308 t.state = :runnable >> 309 result = yieldto(t, arg) >> 310 process_events(false) >> 311 # return when we come out of the queue >> 312 return result >> 313 end >> 314 end >> 315 assert(false) >> 316 end >> 317 >> test@pts00433-vm1:~/Mahesh/julia/julia$ >> >> Sorry for writing such a long mail but I want to give all the information >> that I have so it will help to understand problem in better way >> with some background information. >> >> Thanks & Regards, >> -Mahesh >> >
