Điểm đầu tiên để tạo ra về PTX là nó chỉ là một biểu diễn trung gian của mã chạy trên GPU - ngôn ngữ lắp ráp máy ảo. PTX được lắp ráp để nhắm mục tiêu mã máy bằng ptxas
vào thời gian biên dịch hoặc bằng trình điều khiển khi chạy. Vì vậy, khi bạn nhìn vào PTX, bạn đang xem xét trình biên dịch phát ra, nhưng không phải là những gì GPU thực sự sẽ chạy. Cũng có thể viết mã PTX của riêng bạn, hoặc từ đầu (đây là mô hình biên dịch JIT duy nhất được hỗ trợ trong CUDA), hoặc như một phần của bộ phận lắp ráp nội tuyến trong mã CUDA C (sau này được hỗ trợ chính thức từ CUDA 4.0, nhưng " không chính thức "được hỗ trợ lâu hơn thế). CUDA luôn được gửi kèm với hướng dẫn đầy đủ về ngôn ngữ PTX với bộ công cụ, và nó được viết đầy đủ. ocelot project đã sử dụng tài liệu này để triển khai trình biên dịch chéo PTX của riêng chúng, cho phép mã CUDA chạy tự nhiên trên phần cứng khác, bộ xử lý x86 ban đầu, nhưng gần đây hơn GPU AMD.
Nếu bạn muốn xem GPU đang chạy như thế nào (trái ngược với những gì trình biên dịch phát ra), NVIDIA hiện cung cấp công cụ phân tách nhị phân có tên là cudaobjdump
có thể hiển thị các đoạn mã máy thực tế trong mã được biên dịch cho GPU Fermi. Có một công cụ cũ, không chính thức được gọi là decuda
hoạt động với GPU G80 và G90.
Có nói rằng, có rất nhiều điều cần học từ đầu ra PTX, đặc biệt là cách trình biên dịch áp dụng tối ưu hóa và hướng dẫn nào nó phát ra để thực hiện một số cấu trúc C nhất định. Mọi phiên bản bộ công cụ NVIDIA CUDA đều có a guide to nvcc
và documentation for the PTX language. Có rất nhiều thông tin chứa trong cả hai tài liệu để tìm hiểu cách biên dịch mã hạt nhân CUDA C/C++ thành PTX và để hiểu hướng dẫn PTX sẽ làm gì.
Bạn có thể tháo rời mã nhị phân. IMO bạn nên xem xét, để tránh rơi vào "Tôi nghĩ rằng nó sẽ tối ưu hóa" loại bẫy và có thể nhìn thấy những gì bạn đang thực sự làm khi bạn đang tối ưu hóa hạt nhân. – harold