Pergunta

Estou tentando testar algumas funções típicas do CUDA durante o processo de configuração. Como posso escrever na minha configuração.ac? Algo como:

AC_TRY_COMPILE([],
[
__global__ static void test_cuda() {
    const int tid = threadIdx.x;
    const int bid = blockIdx.x;
    __syncthreads();
}
],
[cuda_comp=ok],[cuda_comp=no])

Mas o NVCC não é definido em AC_Lang. Devo criar minhas próprias macros M4?

Foi útil?

Solução

Eu sou altamente duvidoso se é possível conectar de maneira limpa na série de macros AC_LANG, AC_TRY_COMPILE, etc. sem reescrever partes do AutoConf.

A aposta segura para você é apenas escrever um teste. A menos que você precise desse teste em vários projetos, você nem precisa envolver o teste no M4 Macros.

O teste veria primeiro para nvcc, depois crie algum arquivo de fonte de teste e, finalmente, tente compilar isso usando $NVCC. Em seguida, ele precisa examinar os resultados da compilação (código de retorno e arquivos gerados) e, finalmente, limpar os arquivos que poderiam ter gerado.

Algo como

AC_ARG_VAR([NVCC], [nvcc compiler to use])
AC_PATH_PROG([NVCC], [nvcc], [no])
working_nvcc=no
if test "x$NVCC" != "xno"
the
    AC_MSG_CHECKING([whether nvcc works])
    cat>conftest.c<<EOF
    __global__ whatever() {
       ...
    }
EOF
    if $NVCC conftest.c && test_whether_output_files_are_ok
    then
        working_nvcc=yes
    fi
    rm -f conftest.c conftest.o conftest.what conftest.ever
    AC_MSG_RESULT([$working_nvcc])
fi
AM_CONDITIONAL([WORKING_NVCC], [test "x$working_nvcc" = "xyes"])
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top