bertiniteam / b2

Bertini 2.0: The redevelopment of Bertini in C++.
88 stars 34 forks source link

how to link lib when compiling in a remote server #165

Closed C-H-Chien closed 2 years ago

C-H-Chien commented 2 years ago

Hi, I would like to use a cluster of CPUs to run Bertini so I am trying to compile from the source code in a remote server. Currently, when I tried ./configure, the libmpc could not be found. Here's the error message:

configure: error: unable to findlibmpcfor complex arithmetic. should have come with mpfr? you need it for bmp_complex.

The libmpc does exist in the server, under /usr/lib64/, but when I tried to add options like ./configure LDFLAGS="-L/usr/lib64", the same error message appears. If I append LD_LIBRARY_PATH with the directory /usr/lib64/, it also does not work.

I am wondering how I can explicitly link the libmpc when configuring?

I am sorry for the silly question. Thank you!

ofloveandhate commented 2 years ago

Hi! If you're looking for parallel capabilities off-the-shelf, you should use Bertini 1 -- Bertini 2 is still experimental, and has no parallelism built-in. If you still want, I can help you get compiled, but first I need to check whether you should just use Bertini 1.

C-H-Chien commented 2 years ago

Hi! Thank you for the quick reply. Yes, I am looking for the bertini that is able to run on multiple CPU cores. In that case, I can just use Bertini 1.

I downloaded Bertini 1.6 from Bertini's Download page (the second link), and after extraction, under the BertiniSource_v16/ directory, I met "Permission denied" issue after ./configure. Does ./configure requires root privilege, or am I doing the compilation procedure incorrectly?

Thank you!

ofloveandhate commented 2 years ago

Does ./configure requires root privilege, or am I doing the compilation procedure incorrectly?

No, it shouldn't. Maybe you have to change permissions? Try chmod +x ./configure, then try running it again.

ofloveandhate commented 2 years ago

( On the original topic, OP probably needed to both use ./configure LDFLAGS="-L/usr/lib64" to specify the location of the mpc library, as well as adding the headers with a -I/path/to/include. So something like

./configure LDFLAGS="-I/path/to/include/for/mpc -L/usr/lib64"

should have worked. )

Sorry B2 doesn't have parallelism. I took a teaching job, and don't have a ton of time for development of Bertini 2, nor do we teach the skills in CS to have my students work on the product much. I'd love it if someone else picked up the project -- I think the start is solid, and I love the interface we came up with, I just lack the time to devote to the project.

C-H-Chien commented 2 years ago

Does ./configure requires root privilege, or am I doing the compilation procedure incorrectly?

No, it shouldn't. Maybe you have to change permissions? Try chmod +x ./configure, then try running it again.

Using chmod +x ./configure indeed works, and now I believe the compilation is complete and Bertini 1.6 is installed in a specified prefix. In that prefix directory, I found three executable files under bin/: bertini, bertini-parallel, and bertini-serial. Does ./bertini-parallel run on multiple CPU cores? Do I need to specify how many cores should be used?

It's totally okay to use Bertini 1 for parallel computing :) I am a Ph.D. student working on a GPU implementation of homotopy continuation, and I am using Bertini primarily to compare the efficiency. For fair comparison, Bertini should be run on multiple cores, and that's why I am here. Perhaps in the future there is an opportunity of cooperation on parallelizing B2!

ofloveandhate commented 2 years ago

For Bertini 1, in the installation directory bertini is a symlink that points to one of bertini-parallel and bertini-serial, depending on which got compiled (I wrote the B1 compilation setup using Autotools)

bertini (bertini-parallel) runs on multiple cores via MPI. So, launch as you would any other MPI-parallel program. Probably mpirun -n 64 bertini or something if you want 64 processes to work together. See the notes for the specific cluster / computer you're using on how to launch MPI programs in parallel, especially if there's a queueing manager in the works.

C-H-Chien commented 2 years ago

Thank you! I will need to find out how I can launch MPI programs in parallel on my server. Let me close this issue and launch another if there is any additional issue.

Thank you again for your efforts on answering my silly questions.

ofloveandhate commented 2 years ago

"sir"

I'm a woman.

C-H-Chien commented 2 years ago

"sir"

I'm a woman.

I am so sorry for my misbehavior! Just edited the comment.

ofloveandhate commented 2 years ago

thank you.