0

我正在尝试在配置过程中测试一些典型的 cuda 功能。如何在我的 configure.ac 中编写它?就像是:

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

但是在 AC_LANG 中没有定义 nvcc。我必须创建自己的 m4 宏吗?

4

1 回答 1

3

我非常怀疑是否可以干净地挂钩到 AC_LANG、AC_TRY_COMPILE 等系列宏,而无需实际重写 autoconf 的一部分。

对你来说安全的赌注是只写一个测试。除非您需要在多个项目中进行该测试,否则您甚至不需要将测试包装在 m4 宏中。

测试将首先检查nvcc,然后创建一些测试源文件,最后尝试使用$NVCC. 然后它需要检查编译结果(返回代码和生成的文件),最后清理它可能生成的所有文件。

就像是

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"])
于 2009-12-29T10:14:14.223 回答