2011-09-08 46 views
13

Tôi hỏi điều này vì tôi biết có cách để sử dụng tệp nhị phân thay vì tệp nguồn.Có ngôn ngữ lắp ráp cho CUDA không?

Ngoài ra, tôi đoán rằng với một ngôn ngữ lắp ráp, sẽ dễ dàng hơn để mô phỏng các con trỏ hàm. Trừ khi lắp ráp trên GPU hoàn toàn khác với GPU trên một CPU.

+0

C sai với CUDA là gì? http://developer.download.nvidia.com/compute/cuda/2_1/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.1.pdf –

+4

Đã trả lời một vài tuần trước [trong câu trả lời cho "Có thể đưa hướng dẫn vào mã CUDA không?" ] (http://stackoverflow.com/questions/3677220/is-it-possible-to-put-instructions-into-cuda-code/7072079#7072079). * Lưu ý: * không phải là câu trả lời được chấp nhận, nhưng câu trả lời đến sau. – dmckee

+0

@dmckee +1. Ngoài ra, kể từ khi con trỏ chức năng CUDA 3.2 (và 2.0 thiết bị) được hỗ trợ mà không cần can thiệp với ptx. Và các thiết bị cũ hơn chỉ đơn giản là không có chức năng như chức năng thiết bị - tất cả các cuộc gọi đến các hàm '__device__' từ hạt nhân được nội tuyến. – aland

Trả lời

29

Bạn có thể muốn xem PTX. NVIDIA cung cấp tài liệu mô tả nó trong tài liệu CUDA 4.0.

http://developer.nvidia.com/nvidia-gpu-computing-documentation

NVIDIA mô tả PTX là "Ta ở mức độ thấp song song đề thi máy và hướng dẫn ảo bộ kiến ​​trúc (ISA). PTX cho thấy nhiều GPU như một thiết bị tính toán dữ liệu song song." Không chính xác như lắp ráp x86, nhưng bạn có thể tìm thấy nó thú vị đọc.

+10

Điều đáng nói là PTX là một tập lệnh ảo. Mỗi kiến ​​trúc NVIDIA riêng biệt đều có ISA vật lý của riêng nó mà PTX nhắm đến.Người ta có thể hướng dẫn PTX nội tuyến vào mã CUDA tương tự như nội tuyến x86 asm. –

12

Có, lắp ráp trên GPU hoàn toàn khác so với CPU. Một trong những điểm khác biệt là tập lệnh cho GPU không được tiêu chuẩn hóa. NVidia (và AMD và các nhà cung cấp GPU khác) có thể và thay đổi hướng dẫn của họ từ một mô hình GPU sang mô hình GPU tiếp theo.

Vì vậy, CUDA không hiển thị ngôn ngữ lắp ráp. Sẽ không có vấn đề gì. (Và những hạn chế trong phương ngữ C của CUDA, và bất kỳ ngôn ngữ nào khác mà họ hỗ trợ, đều có những hạn chế trong phần cứng GPU, không chỉ vì Nvidia ghét bạn và muốn làm phiền bạn. và ngôn ngữ lắp ráp, bạn sẽ không thể làm một cách kỳ diệu những việc bạn không thể làm bây giờ

(Lưu ý rằng NVidia định nghĩa tập lệnh "ảo" mà bạn có thể sử dụng và nhúng vào mã của bạn. không phải là bộ hướng dẫn và nó không ánh xạ trực tiếp đến các hướng dẫn phần cứng.Không chỉ là ngôn ngữ lập trình đơn giản mà "trông giống như" một phương ngữ lắp ráp

+1

oh! tốt để biết ... nếu tôi thậm chí không thể mong đợi rằng mã để làm việc trên GPU khác nhau ... đó chắc chắn là cách tiếp cận sai lầm! Cảm ơn – widgg

+0

Mã CUDA của bạn sẽ hoạt động tốt trên các GPU khác nhau. CUDA chỉ biên dịch nó thành một mục tiêu phù hợp cho mỗi GPU. – jalf

15

Có hai ngôn ngữ lắp ráp CUDA khác nhau.

PTX là ngôn ngữ lắp ráp độc lập với máy được biên dịch xuống SASS, các mã thực tế được thực thi trên một họ GPU cụ thể. Nếu bạn xây dựng .cubins, bạn đang giao dịch với SASS. Hầu hết các ứng dụng thời gian chạy CUDA đều sử dụng PTX, vì điều này cho phép chúng chạy trên các GPU được phát hành sau ứng dụng gốc.

Ngoài ra, các con trỏ hàm đã ở trong CUDA trong một thời gian nếu bạn đang nhắm mục tiêu sm_20 (chuỗi Fermi/GTX 400).

Các vấn đề liên quan