우선, Xcode에서 지원하는 gcc와 clang으로는 OpenMP를 사용할 수 없다.
gcc 버전이 4.2.1이라 OpenMP를 사용할 수 없고, apple의 clang도 여전히 OpenMP를 지원하지 않기 때문에 다른 방법으로 OpenMP를 실행해야만 한다.
검색해서 찾아보니 2가지 방법을 알게 되었는데, 1번째는 clang-omp를 설치해서 실행하는 방법이고, 2번째는 최신 버전의 gcc를 설치하여 실행하는 방법이다.
(최신의 LLVM을 설치하여 clang과 llvm-gcc를 이용하는 방법도 있으나, 해보지 않아서 확실하지 않기에 나중에 해본 뒤 서술하겠다)
2016. 11. 28. gcc-6를 gcc로 변경하는 방법 추가
1. clang-omp로 실행하기
homebrew를 이용하여 터미널에서 다음과 같이 설치한다:
다만 바로 설치하려고 하면 homebrew에서 찾지 못하므로, 다음과 같이 tap을 한다.
$ brew tap homebrew/boneyard
그 다음에 clang-omp를 설치한다.
$ brew install clang-omp
설치가 다 되었으면 untap을 한다.
$ brew untap homebrew/boneyard
테스트를 하기 위해 간단한 코드를 짠 뒤 OpenMP를 다음과 같이 실행해보고 결과가 잘 나오는지 확인해본다.
$ clang-omp -fopenmp hello.c -o hello_clang
$ ./hello_clang
결과는 다음과 같이 나와야 한다.
TBA
2. gcc로 OpenMP 실행하기
최신 버전(현재 6.2)의 gcc를 설치하기 위해 homebrew를 이용하여 재설치한다.
정확히 기억은 나지 않지만,
brew reinstall gcc로 해서 재설치를 하면 multilib이 포함된 gcc라 OpenMP가 작동하지 않을 수도 있다고 하며,
multilib이 없는 gcc(brew reinstall gcc --without -multilib)로 설치하라고 안내가 뜰 거다.
그래서 brew reinstall gcc로 하는 과정을 생략하고 어떻게 설치과정을 거쳤는지 설명하겠다.
우선, 아래와 같이 터미널에서 입력해본다.
$ brew reinstall gcc --without -multilib
아마 다음과 같은 에러가 뜨면서 권한을 요청할 것이다.
Error: Permission denied - /usr/local/share/man/man7/fsf-funding-6.7
chmod를 이용해 설치하는 동안에만 권한을 수정한다.
$ sudo chmod 777 /usr/local/share/man/man7
이후 재설치를 다시 해본다.
$ brew reinstall gcc --without -multilib
설치하는 데 시간이 좀 걸린다. 설치가 다 되면 다시 권한을 되돌려 놓는다.
$ sudo chmod 755 /usr/local/share/man/man7
우리가 사용할 gcc 6.2는 gcc-6으로 지정되어 있다.
기존의 gcc는 위의 Xcode에서 받은 4.2.1 버전으로 실행되므로, OpenMP를 실행할 때 gcc-6으로 시작해서 하면 된다.
위의 예시를 다음과 같이 실행해본다.
$ gcc-6 -fopenmp hello.c -o hello_gcc
$ ./hello_gcc
결과는 위에서 했던 것과 똑같이 나올 것이다.
gcc-6로 계속 사용하는 게 불편하니 gcc로 gcc-6을 불러오게끔 수정한다.
homebrew로 설치하면 gcc-6의 위치는 /usr/local/bin일 것이다.
다른 방법으로 설치했거나 다를 경우 which를 이용해서 확인해본다.
$ which gcc-6
해당 위치로 이동한다. 여기서는 /usr/local/bin로 전제하고 한다.
$ cd /usr/local/bin
gcc-6, g++-6의 심볼릭 링크를 gcc, g++로 생성한다.
$ ln -s gcc-6 gcc
$ ln -s g++-6 g++
PATH를 확인해본다. 내 경우엔 /usr/local/bin이 기존 apple의 gcc 위치(/usr/bin)보다 앞에 있어서 수정할 필요가 없었다.
$ echo $PATH
앞에 없을 경우 .bash_profile 파일을 열어 위의 주소를 추가한다.
vim을 잘 다루지 못해 난 atom으로 열어서 수정했다.
export PATH=/usr/local/bin:$PATH
터미널을 재부팅한 뒤 위의 예시에서 gcc-6 대신 gcc로 실행해본다.
$ gcc -fopenmp hello.c -o hello_gcc
$ ./hello_gcc
굳이 예제를 이용하지 않고 -v나 which를 이용해서 체크해도 상관없다.
Reference)
http://stackoverflow.com/questions/35134681/installing-openmp-on-mac-os-x-10-11
'Programming > C' 카테고리의 다른 글
Intel MKL 설정하기 (0) | 2016.11.28 |
---|---|
OS X에서 gcc로 Open MPI 설행하기 (0) | 2016.11.15 |
'for' loop initial declarations are only allowed in c99 mode use option -std=c99 (0) | 2016.11.09 |
OS X에서 gnuplot 설치하기 (0) | 2016.11.08 |
Linux에서 #include <math.h> 사용하기 (0) | 2016.11.08 |