2013-02-01 71 views
4

我正在學習cudaDecodeD3D9 sample以瞭解CUDA是如何工作的,在編譯時它會從.cu文件生成.ptx文件。據我瞭解,這個.ptx文件到目前爲止是一箇中間表示,它將在任何特定的GPU中及時編譯。該示例使用類cudaModuleMgr通過cuModuleLoadDataEx加載此文件。CUDA .ptx文件是否可移植?

的.ptx文件是文本格式的,我可以看到,在它的頂部是一堆我的機器上的硬編碼路徑,包括我的用戶文件夾,即:

.file 1 "C:/Users/******/AppData/Local/Temp/tmpxft_00002abc_00000000-7_NV12ToARGB_drvapi.cudafe2.gpu" 
    .file 2 "c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h" 
    .file 3 "C:/Program Files (x86)/NVIDIA GPU Computing Toolkit/CUDA/v5.0/include\crt/device_runtime.h" 
    .file 4 "C:/Program Files (x86)/NVIDIA GPU Computing Toolkit/CUDA/v5.0/include\host_defines.h" 
    .file 5 "C:/Program Files (x86)/NVIDIA GPU Computing Toolkit/CUDA/v5.0/include\builtin_types.h" 
    .file 6 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\device_types.h" 
    .file 7 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\host_defines.h" 
    .file 8 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\driver_types.h" 
    .file 9 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\surface_types.h" 
    .file 10 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\texture_types.h" 
    .file 11 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\vector_types.h" 
    .file 12 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\builtin_types.h" 
    .file 13 "C:/Program Files (x86)/NVIDIA GPU Computing Toolkit/CUDA/v5.0/include\device_launch_parameters.h" 
    .file 14 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\crt\storage_class.h" 
    .file 15 "c:\users\******\desktop\cudadecodesample\3_imaging\cudadecoded3d9\cudaProcessFrame.h" 
    .file 16 "c:\program files (x86)\nvidia gpu computing toolkit\cuda\v5.0\include\math_functions.h" 
    .file 17 "C:/Users/******/Desktop/CudaDecodeSample/3_Imaging/cudaDecodeD3D9/NV12ToARGB_drvapi.cu" 
    .file 18 "C:/Program Files (x86)/NVIDIA GPU Computing Toolkit/CUDA/v5.0/include\common_functions.h" 

我的問題是那麼:由於這個文件是在編譯時創建的,它是否只能在我的機器上工作,因爲所有這些硬編碼路徑?我應該怎麼做才能確保程序可以在任何機器上運行,即使CUDA SDK沒有安裝?

回答

5

.file指令僅用於調試。它並不影響代碼在正常情況下如何編譯。所以我相當肯定你可以剝奪它們,或者完全忽略它們,並且代碼將可移植,至少在你的編譯器選項(目標代碼版本,體系結構和編譯大小)所規定的體系結構和功能限制內。

+2

考慮到平臺位數和主機ABI不變,PTX文件是可移植的。對於32位上下文,64位PTX模塊不能進行JIT。 PTX模塊在sizeof(long)== 8的平臺上生成,可能會在sizeof(long)== 4(即Linux到Windows)的平臺上導致運行時失敗。 –