2016-02-01 17 views
13

Jak mogę uruchomić OpenMP na Mac OSX 10.11, aby móc wykonywać skrypty przez terminal?Instalacja OpenMP na Mac OS X 10.11

Zainstalowałem OpenMP: brew install clang-omp.

Kiedy biegnę, na przykład: gcc -fopenmp -o Parallel.b Parallel.c następujące wyrażenie zwraca: fatal error: 'omp.h' file not found

Próbowałem również: brew install gcc --without-multilib ale niestety ostatecznie powrócił następujące (po uprzednim zainstalowaniu pewne zależności):

The requested URL returned error: 404 Not Found 
Error: Failed to download resource "mpfr--patch" 

Wszelkie zalecane prace dookoła?

+1

Prawdopodobny duplikat [Błąd włączania openmp - "ld: biblioteka nie została znaleziona dla -lgomp" i błędy Clang] (http://stackoverflow.com/questions/20321988/error-enabling-openmp-ld-library-not- found-for-lgomp-and-clang-errors) – user3528438

+0

Miałem ostatnio ten problem i naprawiłem go ponownie instalując clang-omp. – Jeff

+1

Um, jeśli chcesz clang-omp, musisz go wywołać, a nie GCC – Jeff

Odpowiedz

30

Na mac, polecenie gcc jest dowiązaniem symbolicznym do Clang. Więc dzwoniąc pod numer gcc -fopenmp -o your_program your_program.c, używasz Clanga, który do tej pory nie miał wbudowanej obsługi OpenMP.

Nowsze wersje Clanga mają obsługę OpenMP zgodnie z postem this (gdzie można również znaleźć instrukcje, jak je skonfigurować).

Z drugiej strony, jeśli nadal chcesz używać gcc, mogę przeprowadzić Cię przez kroki, które mi pomogły.

  1. Zainstaluj gcc z naparami. Polecenie użyte powinno działać: brew install gcc --without-multilib

    Ewentualnie, jeśli napar mówi, że masz już zainstalowany gcc można spróbować brew reinstall gcc --without-multilib

    Jak można zauważyć, jeśli nie podasz --without-multilib napar ostrzega, że ​​może OpenMP nie działa.

  2. Znajdź lokalizację nowo zainstalowanego gcc. Brew dodaje numer wersji do gcc, aby nie kolidował z wersją zainstalowaną przez narzędzia wiersza poleceń. Dowiązanie symboliczne można znaleźć pod numerem usr/local/bin. W moim przypadku jest to usr/local/bin/gcc-5. Jeśli klikniesz prawym przyciskiem myszy i wybierzesz "Pokaż oryginał", powinien pokazać się plik wykonywalny gcc-5 pod numerem /usr/local/Cellar/gcc/5.3.0/bin/gcc-5 (numery wersji mogą się różnić).

  3. Teraz musisz poinformować swój system o tym. Podczas wywoływania kompilatora twój bash domyślnie będzie wyglądał /usr/bin, a nie w /usr/local/bin. Musisz dodać ten katalog do swojego katalogu $ PATH. Można to łatwo zrobić za pomocą polecenia:

    PATH=/usr/local/bin:$PATH

  4. Teraz powinieneś być w stanie skompilować z OpenMP włączony przy użyciu:

    gcc-5 -fopenmp -o your_program your_program.c

    uwaga: gcc-5 jest wersją mam zainstalowany, twój może się różnić.

+0

Działa dla mnie, a aktualna wersja to 'gcc- 6'. Chociaż jeśli instalujesz homebrew po raz pierwszy, czy modyfikacja $ PATH nie powinna być zapisana w twoim .bashrc? – APaul

+1

Gdzie są pliki? Pojawia się błąd informujący, że nie ma pliku wejściowego. – SumNeuron

+0

Jakie pliki określasz jako @SumNeuron? Jeśli masz na myśli te w ostatniej linii kodu, dałem pierwszy "Parallel" to nazwa pliku wyjściowego, a "Parallel.c" jest źródłem do kompilacji. Twój terminal musi znajdować się w tym samym katalogu co plik "Parallel.c", w przeciwnym razie go nie znajdzie. –

12
  • zainstalować clang-OMP

    brew install clang-omp 
    
  • upewnij się, że komenda Xcode narzędzie linia

    xcode-select --install 
    
  • I rzeczywiście miał jeden błąd podczas uruchamiania przykładowy kod OpenMP

    /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); 
    
  • Wystarczy usunąć jedną przestrzeń, która występuje pomiędzy __ Kai z pliku

  • Teraz użyj polecenia

    clang-omp -fopenmp helloopenmp.c 
    

    i uruchomić następujący kod

    #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()); 
    } 
    
  • powinieneś uzyskać dane wyjściowe podobne do tego

    Hello from thread 3, nthreads 4 
    Hello from thread 2, nthreads 4 
    Hello from thread 0, nthreads 4 
    Hello from thread 1, nthreads 4 
    
  • Pracował na OS X 10.11.3 i aktualizacji zaparzania dnia 18 lut 2016

+7

clang-omp został usunięty z homebrew/core w commit c57e307: clang-omp: migrate to boneyard Funkcjonalność jest teraz dostępna jako część LLVM w Homebrew. –

0
brew install cmake 
brew install gcc --without-multilib 
cmake -DCMAKE_CXX_COMPILER=g++-6 .. 
make -j 
0

Po zainstalowaniu gcc:

brew install gcc --without-multilib 

i export PATH:

export PATH=/usr/local/bin:$PATH 

Może być konieczne wyeksportowanie pakietu CC, który działa dla mnie:

export CC=/usr/local/bin/gcc 

To może być gcc-7, czy cokolwiek innego.

0
  1. Zainstaluj gcc używając warzenia.

    brew install gcc 
    
  2. Sprawdź gcc jest zainstalowany.

    $which g++-7 
    /usr/local/bin/g++-7 
    
  3. Zmień kompilator cmake cxx.

    cmake -DCMAKE_CXX_COMPILER=g++-7 
    make 
    

Może to pomoże.