Я изучаю образец cudaDecodeD3D9 чтобы узнать, как работает CUDA, и при компиляции он генерирует файл .ptx из файла .cu. Этот файл .ptx, насколько я понимаю, является промежуточным представлением, которое будет скомпилировано как раз вовремя для любого конкретного графического процессора. В примере используется класс cudaModuleMgr для загрузки этого файла через cuModuleLoadDataEx.
Файл .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 не установлен?
Директива .file предназначена только для отладки. Это не влияет на то, как код будет компилироваться при нормальных обстоятельствах. Поэтому я совершенно уверен, что вы можете удалить их или просто полностью игнорировать, и код будет переносимым, по крайней мере, в пределах ограничений архитектуры и функций, определяемых параметрами вашего компилятора (например, целевая версия кода, архитектура и размер компиляции).
Других решений пока нет …