es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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).

Tags:  , ,

Answer

  1. Avatar for 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:

    nvcc --fatbin --device-link -o mysources.fatbin mysource1.cu mysource2.cu ...
    

    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.

Comments are closed.