I have migrated to Julia about less than a month ago from Fortran + Matlab. I started learning C++ last year to write MPI codes but found it too cumbersome.
In Julia, my main goal is to write parallel codes for numerical PDEs either using multithreading (@threads@floop etc) or multiprocessing (@distributed@distributedarrays etc). Though I am understanding the toy examples given in the documentation, I am not going very much forward with real implementation.
I need to see a few examples of PDEs, something as simple as Laplace or Poisson equation solved using finite/boundary element or finite difference or finite volume implemented using a solver in parallel. Preferably, something that is explained/written in a pedagogical style. For e.g., I wish to look at a code solving the problem in serial and then in parallel and then showing the time vs threads/processor plot.
In my own research, I use boundary element method (BEM) but any PDE example will just work fine. I first wrote a BEM code in serial which runs much faster than Matlab and about as fast as Fortran. Then, I just finised writing a code using distributedarrays but it is really slow. I have also tried multithreading but I run into data-race issues. I am happy to show the code but I thought it will be better for me to learn by seeing some good examples.
Thank you very much for the prompt response. I have written a minimal boundary element method code for a 2D sine wave. It solves the Stokes equation using boundary integral formulation.
Are you saying I will not benefit from parallelising the for-loops or storing the matrix RM in different processors when it gets too large, like (40,000 x 40,000) or so?
Are you saying I will not benefit from parallelising the for-loops or storing the matrix RM in different processors when it gets too large, like (40,000 x 40,000) or so?
I donāt know if this helps, but you may want to look at PencilArrays.jl for this. Note that it works on top of MPI via MPI.jl. For the linear algebra, I guess you could use Elemental.jl as others have suggested.
Not very much. When your equations are large, the O(n^2) operations are dwarfed by the O(n^3) operation. You should parallelize the for loops if you need to because the memory is distributed, but if you check the performance youāll likely see that most of the time is spent in \, so swapping out to Elemental or just something else that does distributed/parallel \ is the next step.
(Hi Juan) Thanks for making me aware of https://github.com/jipolanco/PencilArrays.jl/. It looks promising and very close to what I have in mind. Can it handle unstructured grids like in finite or boundary elements?
Also, are there any finite element libraries in Julia that use any kind of parallelism?
Can it handle unstructured grids like in finite or boundary elements?
Unfortunately, I donāt think so. It was really made with structured grids in mind. It was initially conceived for spectral methods, but it should also be useful for other structured methods.
Also, are there any finite element libraries in Julia that use any kind of parallelism?
Iām not sure, but you can look at this list of Julia PDE packages to get an idea. Thereās in particular a section dedicated to FEM packages.