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
>

Reply via email to