5. CUDA Cross-Platform Environment
크로스-플랫폼 개발은 우분투 시스템에서만 지원되고, 패키지 매니저 인스톨 프로세스에 의해 제공된다.
우리는 크로스-플랫폼 개발 환경으로서 Ubuntu 14.04를 선택할 것을 권고한다. 이 선택은 GCC와 GLIBC 버전 불일치와 같은 host/target 호환성 불가를 방지하도록 도와준다.
5.1. CUDA Cross-Platform Installation
다음 단계 중 어떤 것은 native Ubuntu installation의 일부로서 이미 수행되어졌을 수도 있다. 그러한 단계는 스킵해도 안전할 것이다.
이 단계들은 타겟 시스템이 아닌 x86_64 호스트 시스템에서 실행되어져야 한다. 타게 시스템에 고유 CUDA Toolkit을 설치하기 위해 native Ubuntu installation 섹션을 참조하라.
Perform the pre-installation actions.
Enable the foreign architecture
크로스-플랫폼 툴킷을 인스톨하려면 외부 아키텍쳐(foreign architecture)를 활성화시켜야 한다. armhf, arm64(aarch64), ppc64el를 외부 아키텍쳐로서 활성화시키려면, 다음 명령들을 실행시켜야 한다(<arch>를 원하는 아키텍쳐로 대체해야 한다):$ sudo dpkg --add-architecture <arch> $ sudo apt-get update- Install repository meta-data
Note: When using a proxy server with aptitude, ensure that wget is set up to use the same proxy settings before installing the cuda-repo package.$ sudo dpkg -i cuda-repo-<distro>_<version>_amd64.deb - Update the Apt repository cache
$ sudo apt-get update - Install the cross-platform CUDA Toolkit
armhf, aarch64, ppc64el를 위한 크로스-플랫폼 툴킷을 인스톨하기 위해, 다음 명령을 실행시켜라(<arch>를 원하는 아키텍쳐로 대체해야 한다):$ sudo apt-get install cuda-cross-<arch> - Perform the post-installation actions.
5.2. CUDA Cross-Platform Samples
이 섹션은 크로스-플랫폼 샘플들을 빌드하기 위해 사용되는 옵션들을 설명한다. 아래에 나타낸 지원되는 타겟을 기반으로 하여 TARGET_ARCH=<arch>와 TARGET_OS=<os>를 선택해야 한다. TARGET_FS=<path>를 이용하여 nvcc가 샘플이 사용하는 라이브러리와 헤더를 가리키도록 할 수 있다.

TARGET_ARCH
어플리케이션을 크로스-컴파일할 때, 타겟 아키텍쳐를 지정하여야 한다. 만약 그러지 않으면, 디폴트로 호스트 아키텍쳐로 지정된다. 허용되는 아키텍쳐는:
x86_64- 64-bit x86 CPU architecturearmv7l- 32-bit ARM CPU architecture, like that found on Jetson TK1aarch64- 64-bit ARM CPU architecture, found on certain Android systemsppc64le- 64-bit little-endian IBM POWER8 architecture
TARGET_OS
어플리케이션을 크로스-컴파일할 때, 타겟 OS를 지정해야 한다. 만약 그러지 않으면, 디폴트로 호스트 OS가 지정된다. 허용되는 OS들은:
linux- for any Linux distributionsdarwin- for Mac OS Xandroid- for any supported device running Androidqnx- for any supported device running QNX
TARGET_FS
CUDA 샘플들을 크로스-컴파일하기 위한 가장 신뢰성 있는 방법은
TARGET_FS변수를 사용하는 것이다. 그렇게 하려면, 호스트 상에서 타겟 파일 시스템을 마운트하라(/mnt/target). 샘플을 크로스-컴파일하기 위해, 다음을 실행하라:$ make TARGET_ARCH=<arch> TARGET_OS=<os> TARGET_FS=/mnt/targetCopying Libraries
만약TARGET_FS옵션이 사용할 수 없다면, 사용되는 라이브러리를 타겟 시스템으로부터 호스트 시스템으로 복사해야 한다(/opt/target/libs). 만약 그 샘플이 GL을 사용한다면, GL 헤더를 복사해야 한다(/opt/target/include). 링커에게 라이브러리가 어디에 있는지 알려줘야 한다(-rpath-link과/또는-L옵션 사용). 일부 라이브러리로부터 해소되지 않는 심볼들을 무시하기 위해, 아래에 나타낸--unresolved-symbols옵션을 사용하라. 그 샘플들을 빌드하도록 강제하기 위해SAMPLE_ENABLED를 사용해야 한다. 예를 들면, 그러한 라이브러리를 사용하는 어떤 샘플을 크로스-컴파일하기 위해 다음을 실행하라:
$ make TARGET_ARCH=<arch> TARGET_OS=<os> \
EXTRA_LDFLAGS="-rpath-link=/opt/target/libs -L/opt/target/libs --unresolved-symbols=ignore-in-shared-libs" \
EXTRA_CCFLAGS="-I /opt/target/include" \
SAMPLE_ENABLED=1
5.3. Nsight Eclipse Edition
Nsight Eclipse Edition는 크로스-플랫폼 개발을 지원한다. 더 자세한 내용은 Nsight Eclipse Edition Getting Started Guide를 보라.