How can I get OpenMP to run on Mac OSX 10.11, so that I can execute scripts via terminal?
I have installed OpenMP: brew install clang-omp
.
When I run, for example: gcc -fopenmp -o Parallel.b Parallel.c
the following expression returns: fatal error: 'omp.h' file not found
I have also tried: brew install gcc --without-multilib
but unfortunately this eventually returned the following (after first installing some dependencies):
The requested URL returned error: 404 Not Found
Error: Failed to download resource "mpfr--patch"
Any recommended work arounds?
Apple-provided clang does not support OpenMP by default. It is possible to enable the feature in Apple-provided clang and also possible to install a more recent version of clang that does support OpenMP by default.
Clang fully supports OpenMP 4.5. Clang supports offloading to X86_64, AArch64, PPC64[LE] and has basic support for Cuda devices.
On a Mac, the command gcc is a symlink to Clang. So by calling
gcc -fopenmp -o your_program your_program.c
you are in fact using Clang, which until now has not had built-in support for OpenMP.
The newer versions of Clang do have support for OpenMP according to this post (where you can also find instructions on how to set it up).
On the other hand, if you still want to use gcc I can guide you through the steps that worked for me.
Install gcc with brew. The command you used should work:
brew install gcc --without-multilib
Alternatively, if brew says that you already have gcc installed you can try
brew reinstall gcc --without-multilib
As you may have noted, if you don't specify --without-multilib
brew warns you that OpenMP may not work.
Find the location of the newly installed gcc.
Brew appends the version number to gcc so that it does not conflict with the one installed by Command Line Tools. You will find the symlink in usr/local/bin
.
In my case it's
usr/local/bin/gcc-5
If you right-click and chose "Show original" it should show the gcc-5
executable in /usr/local/Cellar/gcc/5.3.0/bin/gcc-5
(version numbers may differ).
Now you need to tell your system about it:
When calling a compiler your bash will look into /usr/bin
by default and not in /usr/local/bin
. You need to add this directory to your $PATH.
This can be easily done with the command:
PATH=/usr/local/bin:$PATH
Now you should be able to compile with OpenMP enabled using:
gcc-5 -fopenmp -o your_program your_program.c
Remark: gcc-5
is the version I have installed, yours might differ.
install clang-omp
brew install clang-omp
make sure you xcode command line tool
xcode-select --install
I actually had one error while running a sample openmp code
/usr/local/opt/libiomp/include/libiomp/omp.h:139:21: error: expected ';' after top level declarator extern void __ KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t);
Just remove one space that is present between __ and KAI from the file
Now use the command
clang-omp -fopenmp helloopenmp.c
and run the following code
#include <omp.h>
#include <stdio.h>
int main() {
#pragma omp parallel
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
}
You should get output similar to this
Hello from thread 3, nthreads 4
Hello from thread 2, nthreads 4
Hello from thread 0, nthreads 4
Hello from thread 1, nthreads 4
Worked on OS X 10.11.3 and with brew update dated 18th Feb 2016
brew reinstall gcc --without-multilib
gcc-8 -Wall -fopenmp your-parallel-program.c
Notice the gcc-8 watch the version brew installs, yours may be gcc-7 or gcc-9
==> Pouring gcc-8.2.0.high_sierra.bottle.1.tar.gz
🍺 /usr/local/Cellar/gcc/8.2.0: 1,495 files, 344.8MB
That's it!
By default, GCC is using clang distribution. Install GCC with Homebrew. Once installed, you can compile the code specifying the GCC version installed by Homebrew and adding the OpenMP flag. A hello_world example is shown below:
brew install gcc
brew install libomp
brew info gcc
gcc: stable 10.2.0 (bottled), HEAD
GNU compiler collection
export OMP_NUM_THREADS=8
create hello.c
#include <stdio.h>
#include <omp.h>
int main(void){
#pragma omp parallel
{
printf("Hello World! \n");
}
return 0;
}
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Install gcc using brew.
brew install gcc
Check gcc is installed.
$which g++-7
/usr/local/bin/g++-7
Change cmake cxx compiler.
cmake -DCMAKE_CXX_COMPILER=g++-7
make
Maybe this will help you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With