하드웨어없이 CUDA 프로그래밍을위한 GPU 에뮬레이터 [닫기]


111

질문 : 실제 하드웨어없이 CUDA를 프로그래밍하고 테스트 할 수있는 Geforce 카드 용 에뮬레이터가 있습니까?


정보 :

CUDA에서 몇 가지 시뮬레이션 속도를 높이고 싶지만 문제는이 개발을 수행하기 위해 항상 데스크톱 주위에 있지 않다는 것입니다. 대신 넷북에서 몇 가지 작업을하고 싶지만 넷북에 GPU가 없습니다. 내가 아는 한 CUDA를 실행하려면 CUDA 지원 GPU가 필요합니다. 이 문제를 해결할 방법이 있습니까? 유일한 방법은 GPU 에뮬레이터 인 것 같습니다 (분명히 느리지 만 작동 할 것임). 하지만이 일을 할 수있는 방법이 무엇이든 듣고 싶습니다.

Ubuntu 10.04 LTS에서 프로그래밍 중입니다.


답변:


39

2016 년 (그리고 2017 년까지) 해답을 찾고있는 사람들을 위해 ...


부인 성명

  • 결국 GPU를 에뮬레이션하지 못했습니다.
  • gpuocelot종속성 목록을 충족하면 사용할 수 있습니다 .

BunsenLabs (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) i686 GNU / Linux) 용 에뮬레이터를 구하려고했습니다.

내가 배운 것을 말씀 드리겠습니다.


  1. nvcc-deviceemuCUDA Toolkit 3.0에서 다시 옵션을 사용했습니다.

    CUDA Toolkit 3.0을 다운로드하고 설치 한 다음 간단한 프로그램을 실행 해 보았습니다.

    #include <stdio.h>
    
    __global__ void helloWorld() {
        printf("Hello world! I am %d (Warp %d) from %d.\n",
            threadIdx.x, threadIdx.x / warpSize, blockIdx.x);
    }
    
    int main() {
        int blocks, threads;
        scanf("%d%d", &blocks, &threads);
        helloWorld<<<blocks, threads>>>();
        cudaDeviceSynchronize();
        return 0;
    }

    CUDA Toolkit 3.0 nvcc에서는 /usr/local/cuda/bin/.

    컴파일하는 데 어려움이 있음이 밝혀졌습니다.

    NOTE: device emulation mode is deprecated in this release
          and will be removed in a future release.
    
    /usr/include/i386-linux-gnu/bits/byteswap.h(47): error: identifier "__builtin_bswap32" is undefined
    
    /usr/include/i386-linux-gnu/bits/byteswap.h(111): error: identifier "__builtin_bswap64" is undefined
    
    /home/user/Downloads/helloworld.cu(12): error: identifier "cudaDeviceSynchronize" is undefined
    
    3 errors detected in the compilation of "/tmp/tmpxft_000011c2_00000000-4_helloworld.cpp1.ii".

    인터넷에서 내가 사용 gcc-4.2하거나 이와 유사한 고대 gcc-4.9.2오류 대신 사용하면 사라질 수 있음을 발견했습니다 . 나는 포기 했어.


  2. gpuocelot

    Stringer의 답변에는 매우 오래된 gpuocelot프로젝트 웹 사이트에 대한 링크가 있습니다. 그래서 처음에는 프로젝트가 2012 년쯤에 중단되었다고 생각했습니다. 실제로 몇 년 후 버려졌습니다.

    다음은 최신 웹 사이트입니다.

    가이드에 따라 gpuocelot을 설치하려고했습니다 . 그래도 설치 중에 몇 가지 오류가 발생하여 다시 포기했습니다. gpuocelot더 이상 지원되지 않으며 매우 특정한 버전의 라이브러리 및 소프트웨어에 의존합니다.

    2015 년 7 월 부터이 자습서 를 따르려고 할 수 있지만 작동 할 것이라고 보장하지는 않습니다. 나는 그것을 테스트하지 않았습니다.


  3. MCUDA

    MCUDA 번역 프레임 워크는 CUDA 프로그래밍 모델을 CPU 아키텍처로 효과적으로 컴파일하도록 설계된 Linux 기반 도구입니다.

    유용 할 수 있습니다. 다음은 웹 사이트에 대한 링크 입니다.


  4. CUDA 폐기물

    Windows 7 및 8에서 사용하는 에뮬레이터입니다. 그래도 시도하지 않았습니다. 더 이상 개발되지 않은 것 같습니다 (마지막 커밋 날짜는 2013 년 7 월 4 일).

    다음은 프로젝트 웹 사이트 링크입니다. https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    마지막 업데이트 : 2017.03.12

    으로 dashesy이 코멘트에 지적 CU2CL는 흥미로운 프로젝트가 될 것으로 보인다. CUDA 코드를 OpenCL 코드 로 변환 할 수있는 것 같습니다 . 따라서 GPU가 OpenCL 코드를 실행할 수 있다면 CU2CL 프로젝트가 관심을 가질 수 있습니다.

    연결:


4
부끄러운 일입니다! 느린 경로를 제공하지 않으면 모든 시스템에서 애플리케이션을 빌드하고 테스트하는 것이 매우 어렵습니다. 즉, 개발자는 Cuda에 종속성을 추가하지 않아야합니다. 취미로하는 사람과 연구자들은 일회성 프로젝트에 여전히 사용할 수 있습니다. 고객을위한 실제 응용 프로그램이 아닙니다.
dashesy

3
CU2CL 은 활성화 된 것으로 보이며 살펴볼 가치가 있습니다.
dashesy

1
1. nvcc -deviceemu
Nathan

2
4.있어 CUDA Waste작업
나단

2
5.있어 CU2CL작업
나단

41

이 응답은 너무 늦을 수 있지만 어쨌든 주목할 가치가 있습니다. 에뮬레이터 또는 LLVM 백엔드를 사용하려면 CUDA 장치 드라이버 (libcuda.so)를 설치하지 않고도 GPU Ocelot ( 이 중 저는 핵심 기여자 중 한 명 )을 컴파일 할 수 있습니다. NVIDIA GPU가없는 시스템에서 에뮬레이터를 시연했습니다.

에뮬레이터는 이전 GPU가 지원하지 않는 기능을 포함 할 수있는 PTX 1.4 및 PTX 2.1 사양을 충실하게 구현하려고합니다. LLVM 변환기는 CUDA가 GPU뿐만 아니라 멀티 코어 CPU를 프로그래밍하는 효과적인 방법이 될 수 있도록 PTX에서 x86으로 정확하고 효율적인 변환을 위해 노력하고 있습니다. -deviceemu꽤 오랫동안 CUDA의 사용되지 않는 기능 이었지만 LLVM 변환기는 항상 더 빨랐습니다.

또한 에뮬레이터에는 정렬 된 메모리 액세스, 공유 메모리에 대한 액세스가 올바르게 동기화되고 전역 메모리 역 참조가 할당 된 메모리 영역에 액세스하는지 확인하기 위해 여러 가지 정확성 검사기가 에뮬레이터에 내장되어 있습니다. 우리는 또한 주로 gdb에서 영감을 얻은 명령 줄 대화 형 디버거 를 CUDA 커널, 설정 중단 점 및 감시 점 등을 통해 단일 단계로 구현했습니다 . 이러한 도구는 특히 CUDA 프로그램의 디버깅을 촉진하기 위해 개발되었습니다. 유용 할 수 있습니다.

Linux 전용 측면에 대해 죄송합니다. 우리는 Windows 브랜치 ( Mac OS X 포트 포함 )를 시작했지만 엔지니어링 부담은 이미 우리의 연구 활동을 강조 할만큼 충분히 큽니다. 시간과 관심이있는 사람이 있으면 Windows 지원을 제공 할 수 있습니다!

도움이 되었기를 바랍니다.


3
안녕-아직 곁에있어? 기존 CUDA 빌드 환경에서 Ocelot으로 프로그램을 빌드하는 방법에 대한 문서가 있습니까? 또한 Ocelot은 Thrust와 함께 작동합니까?
Kerrek SB 2011

최신 GPU Ocelot 소스 코드는 GitHub gtcasl / gpuocelot을 통해 찾을 수 있습니다 .
l --marc l

36

PTX (CUDA 코드가 변환되는 바이트 코드)가 에뮬레이트된다는 점에서 진정한 에뮬레이터 인 gpuocelot 프로젝트 도 확인할 수 있습니다 .

LLVM 변환기도 있습니다. -deviceemu를 사용할 때보 다 더 빠른지 테스트하는 것이 흥미로울 것입니다.


슬픈 부분은 Linux 전용이라는 것입니다. 저는 기본적으로 리눅스 사용자입니다. 내가하는 개발의 일부는 윈도우 머신에있다. -deviceemu는 더 이상 사용되지 않으므로 jskaggz 답변은 적합하지 않습니다. 전반적으로 이것이 최선의 대답 인 것 같습니다.
Narcolapser 2010 년

14

CUDA 툴킷 에는 CUDA 3.0 릴리스주기까지 하나가 내장되어 있습니다. 나는 매우 오래된 CUDA 버전 중 하나를 사용하고 nvcc로 컴파일 할 때 -deviceemu를 사용해야합니다.


4
CUDA 에뮬레이터는 더 이상 사용되지 않으므로 gpuocelot을 보는 것이 좋습니다.
Tom

1
또한 CUDA 에뮬레이터는 논리적 CUDA 스레드 당 하나의 기본 OS 스레드를 사용하므로 매우 비효율적입니다.
Stringer

9

https://github.com/hughperkins/cuda-on-cl을 사용하면 OpenCL 1.2 GPU에서 NVIDIA® CUDA ™ 프로그램을 실행할 수 있습니다 (전체 공개 : 저자입니다).


CPU에서도 실행할 수 있습니까?
Mateusz Piotrowski 2011

GPU 만. OpenCL 1.2 GPU 이상이 필요합니다.
Hugh Perkins

1
아마도 jrprice.com/Oclgrind를 사용하여 CPU에서 실행할 수 있지만 아마도 당신이 의미하는 바가 아닐 것입니다 ;-). Coriander (새 이름)는 아마도 CPU OpenCL에서도 실행될 수있을 것 같지만 이것을 테스트 한 적이 없습니다. 약간의 자극이 필요할 수 있습니다.
휴 퍼킨스

3

-deviceemu를 사용하여 프로그래밍 할 때는 nvcc가 에뮬레이션 모드에서 허용하지만 실제로 GPU에서 실행할 때는 허용하지 않는 작업이 있으므로주의하십시오. 이것은 대부분 장치-호스트 상호 작용에서 발견됩니다.

그리고 언급했듯이 느린 실행에 대비하십시오.


0

GPGPU-Sim 은 GPU를 사용하지 않고 CUDA 프로그램을 실행할 수있는 GPU 시뮬레이터입니다. 도움이되는 경우를 대비하여 GPGPU-Sim이 설치된 도커 이미지 를 만들었습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.