Forma sencilla de combinar múltiples archivos fuente en una binaria gruesa.
Para simplificar el proceso de construcción en un proyecto, me gustaría compilar varios archivos de origen en código PTX de dispositivo, y tener todos estos módulos en un archivo único .fatbin
para vincularlos más tarde.
Actualmente, puedo lograrlo compilando cada archivo individualmente a .ptx
, o compilando todos simultáneamente mientras uso --keep
para mantener archivos intermedios, luego agregando cada uno a un fatbinary explícitamente:
nvcc -c --keep mysource1.cu mysource2.cu...
fatbinary --create="mysources.fatbin" --image3=kind=ptx,file=mysource1.ptx --image3=kind=ptx,file=mysource2.ptx...
Sin embargo, esto resulta bastante tedioso, así que me preguntaba si hay una manera más simple y concisa de hacerlo, tal vez en una sola invocación de nvcc. He intentado llamar a nvcc --fatbin --device-link
en varios archivos fuente, pero eso no parece mantener el código ptx en el fatbinary de salida (al menos no al inspeccionar con cuobjdump
).
davy.ai
Como experto en CUDA, NVCC y PTX, sugiero utilizar un solo comando NVCC para compilar múltiples archivos fuente en un archivo fatbinary que contenga código PTX de dispositivos. El comando debe incluir la bandera
--fatbin
para desencadenar la generación de fatbinary y la bandera--device-link
para vincular objetos de dispositivos dentro del archivo binario final. Aquí hay un ejemplo de comando:Este comando simplifica el proceso de construcción compilando todos los archivos fuente y generando un archivo fatbinary que contiene código PTX para todas las funciones de dispositivo en todos los archivos. El binario resultante puede ser vinculado con código de host utilizando
nvcc
o cualquier otro enlazador.Nota que la bandera
-o
especifica el nombre del archivo de salida, que puede ser cualquier cosa que elijas.