Trình mô phỏng GPU để lập trình CUDA mà không cần phần cứng [đóng]


111

Câu hỏi: Có trình giả lập nào cho thẻ Geforce cho phép tôi lập trình và kiểm tra CUDA mà không cần có phần cứng thực tế không?


Thông tin:

Tôi đang tìm cách tăng tốc một số mô phỏng của tôi trong CUDA, nhưng vấn đề của tôi là tôi không phải lúc nào cũng ở bên máy tính để bàn để thực hiện việc phát triển này. Thay vào đó, tôi muốn thực hiện một số công việc trên netbook của mình, nhưng netbook của tôi không có GPU. Theo tôi biết, bạn cần một GPU có khả năng CUDA để chạy CUDA. Có cách nào để giải quyết vấn đề này không? Có vẻ như cách duy nhất là trình giả lập GPU (rõ ràng là sẽ rất chậm, nhưng sẽ hoạt động). Nhưng dù có cách nào để làm điều này, tôi cũng muốn nghe.

Tôi đang lập trình trên Ubuntu 10.04 LTS.


Câu trả lời:


39

Đối với những người đang tìm kiếm câu trả lời trong năm 2016 (và thậm chí cả năm 2017) ...


Khước từ

  • Rốt cuộc, tôi đã không thể mô phỏng GPU.
  • Nó có thể được sử dụng gpuocelotnếu bạn đáp ứng danh sách các phụ thuộc của nó.

Tôi đã cố gắng tải một trình giả lập cho BunsenLabs (Linux 3.16.0-4-686-pae # 1 SMP Debian 3.16.7-ckt20-1 + deb8u4 (2016-02-29) i686 GNU / Linux).

Tôi sẽ cho bạn biết những gì tôi đã học được.


  1. nvcctừng có một -deviceemutùy chọn trở lại trong Bộ công cụ CUDA 3.0

    Tôi đã tải xuống Bộ công cụ CUDA 3.0, cài đặt nó và cố gắng chạy một chương trình đơn giản:

    #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;
    }

    Lưu ý rằng trong Bộ công cụ CUDA 3.0 nvccđã có trong /usr/local/cuda/bin/.

    Hóa ra là tôi đã gặp khó khăn khi biên dịch nó:

    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".

    Tôi đã tìm thấy trên Internet rằng nếu tôi sử dụng gcc-4.2hoặc tương tự cũ thay vì gcc-4.9.2các lỗi có thể biến mất. Tôi từ bỏ.


  2. gpuocelot

    Câu trả lời bởi Stringer có một liên kết đến một gpuocelottrang web của dự án rất cũ . Vì vậy, lúc đầu tôi nghĩ rằng dự án đã bị bỏ dở vào năm 2012 hoặc lâu hơn. Trên thực tế, nó đã bị bỏ hoang vài năm sau đó.

    Dưới đây là một số trang web cập nhật:

    Tôi đã cố gắng cài đặt gpuocelot theo hướng dẫn . Tuy nhiên, tôi đã gặp một số lỗi trong khi cài đặt và tôi đã từ bỏ một lần nữa. gpuocelotkhông còn được hỗ trợ và phụ thuộc vào một tập hợp các phiên bản thư viện và phần mềm rất cụ thể.

    Bạn có thể thử làm theo hướng dẫn này từ tháng 7 năm 2015 nhưng tôi không đảm bảo nó sẽ hoạt động. Tôi đã không thử nghiệm nó.


  3. MCUDA

    Khung dịch MCUDA là một công cụ dựa trên linux được thiết kế để biên dịch hiệu quả mô hình lập trình CUDA sang kiến ​​trúc CPU.

    Nó có thể hữu ích. Đây là một liên kết đến trang web .


  4. Chất thải CUDA

    Nó là một trình giả lập để sử dụng trên Windows 7 và 8. Tuy nhiên, tôi vẫn chưa thử. Nó dường như không được phát triển nữa (cam kết cuối cùng là vào ngày 4 tháng 7 năm 2013).

    Đây là liên kết đến trang web của dự án: https://code.google.com/archive/p/cuda-waste/


  1. CU2CL

    Cập nhật lần cuối: 12.03.2017

    Như dấu gạch ngang đã chỉ ra trong các nhận xét, CU2CL có vẻ là một dự án thú vị. Nó dường như có thể dịch mã CUDA sang mã OpenCL. Vì vậy, nếu GPU của bạn có khả năng chạy mã OpenCL thì dự án CU2CL có thể bạn quan tâm.

    Liên kết:


4
Thật là xấu hổ! Do không cung cấp đường dẫn chậm, rất khó để xây dựng và kiểm tra các ứng dụng trên bất kỳ máy nào. Điều này có nghĩa là, các nhà phát triển nên tránh thêm sự phụ thuộc vào Cuda. Nó vẫn có thể được sử dụng bởi những người có sở thích và nhà nghiên cứu, cho các dự án một lần. Không dành cho các ứng dụng thực sự cho khách hàng.
ngắn ngủi

3
CU2CL dường như đang hoạt động và cũng đáng để xem xét.
ngắn ngủi

1
1. nvcc -deviceemu
Nathan

2
4. đã CUDA Wastelàm việc
Nathan

2
5. đã CU2CLlàm việc
Nathan

41

Phản hồi này có thể là quá muộn, nhưng dù sao cũng đáng lưu ý. GPU Ocelot ( trong đó tôi là một trong những người đóng góp cốt lõi ) có thể được biên dịch mà không cần cài đặt trình điều khiển thiết bị CUDA (libcuda.so) nếu bạn muốn sử dụng Trình mô phỏng hoặc phụ trợ LLVM. Tôi đã trình diễn trình giả lập trên các hệ thống không có GPU NVIDIA.

Trình giả lập cố gắng triển khai trung thực các thông số kỹ thuật PTX 1.4 và PTX 2.1 có thể bao gồm các tính năng mà GPU cũ hơn không hỗ trợ. Trình biên dịch LLVM cố gắng dịch chính xác và hiệu quả từ PTX sang x86, hy vọng sẽ làm cho CUDA trở thành một cách hiệu quả để lập trình CPU đa lõi cũng như GPU. -deviceemuđã không còn là một tính năng của CUDA trong một thời gian khá dài, nhưng trình dịch LLVM luôn nhanh hơn.

Ngoài ra, một số công cụ kiểm tra độ đúng được tích hợp trong trình giả lập để xác minh: các truy cập bộ nhớ được căn chỉnh, các truy cập vào bộ nhớ dùng chung được đồng bộ hóa đúng cách và truy cập hội nghị bộ nhớ toàn cầu truy cập các vùng bộ nhớ được cấp phát. Chúng tôi cũng đã triển khai một trình gỡ lỗi tương tác dòng lệnh lấy cảm hứng chủ yếu từ gdb để thực hiện một bước thông qua nhân CUDA, thiết lập các điểm ngắt và điểm giám sát, v.v. bạn có thể thấy chúng hữu ích.

Xin lỗi về khía cạnh chỉ dành cho Linux. Chúng tôi đã bắt đầu một chi nhánh Windows ( cũng như một cổng Mac OS X ) nhưng gánh nặng kỹ thuật đã đủ lớn để gây căng thẳng cho việc theo đuổi nghiên cứu của chúng tôi. Nếu bất kỳ ai có thời gian và quan tâm, họ có thể muốn giúp chúng tôi cung cấp hỗ trợ cho Windows!

Hi vọng điêu nay co ich.


3
Xin chào - bạn vẫn còn ở đây chứ? Có tài liệu nào về cách xây dựng chương trình với Ocelot trên môi trường xây dựng CUDA hiện có không? Ngoài ra, Ocelot có hoạt động với Thrust không?
Kerrek SB

Có thể tìm thấy mã nguồn GPU Ocelot gần đây hơn qua GitHub gtcasl / gpuocelot .
l --marc l

36

Bạn cũng có thể kiểm tra dự án gpuocelot là một trình giả lập thực sự theo nghĩa là PTX (mã bytecode trong đó mã CUDA được chuyển đổi thành) sẽ được mô phỏng.

Ngoài ra còn có một trình dịch LLVM, sẽ rất thú vị khi kiểm tra xem nó có nhanh hơn so với khi sử dụng -deviceemu hay không.


Phần đáng buồn là điều đó chỉ dành cho linux. Mà, mặc định tôi là người dùng linux. một số lượng nhỏ phát triển tôi thực hiện trên máy tính Windows. -Deviceemu không được dùng nữa, vì vậy câu trả lời jskaggz không hoàn toàn phù hợp. hơn tất cả, đây có vẻ là câu trả lời tốt nhất.
Narcolapser

14

Bộ công cụ CUDA đã được tích hợp sẵn cho đến chu kỳ phát hành CUDA 3.0. Tôi, bạn sử dụng một trong những phiên bản CUDA rất cũ này, hãy đảm bảo sử dụng -deviceemu khi biên dịch với nvcc.


4
Trình giả lập CUDA không được dùng nữa, có lẽ bạn nên xem xét gpuocelot.
Tom

1
Thêm vào đó, trình giả lập CUDA sử dụng một chuỗi hệ điều hành gốc cho mỗi luồng CUDA logic, điều này rất kém hiệu quả.
Stringer

9

https://github.com/hughperkins/cuda-on-cl cho phép bạn chạy các chương trình NVIDIA® CUDA ™ trên GPU OpenCL 1.2 (tiết lộ đầy đủ: tôi là tác giả)


Tôi có thể chạy nó trên CPU không?
Mateusz Piotrowski

Chỉ GPU. Cần GPU OpenCL 1.2 hoặc tốt hơn.
Hugh Perkins

1
Bạn có thể chạy nó trên CPU, sử dụng jrprice.com/Oclgrind , nhưng tôi đoán đó có thể không phải là ý bạn ;-). Tôi đoán Coilant (tên mới) cũng có thể chạy trên CPU OpenCL, nhưng tôi chưa bao giờ thử nghiệm điều này. Có thể cần một chút thúc đẩy.
Hugh Perkins

3

Hãy cẩn thận khi bạn đang lập trình bằng -deviceemu vì có những hoạt động mà nvcc sẽ chấp nhận khi ở chế độ giả lập nhưng không phải khi thực sự chạy trên GPU. Điều này chủ yếu được tìm thấy với sự tương tác giữa thiết bị và máy chủ.

Và như bạn đã đề cập, hãy chuẩn bị cho một số quá trình thực thi chậm.


0

GPGPU-Sim là một trình mô phỏng GPU có thể chạy các chương trình CUDA mà không cần sử dụng GPU. Tôi đã tạo một hình ảnh docker có cài đặt GPGPU-Sim cho chính mình trong trường hợp hữu ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.