<分区>
考虑以下程序:
#include <cuda/api_wrappers.hpp>
namespace kernels {
template <typename T>
__global__ void print_stuff()
{
printf("This is a plain printf() call.\n");
}
} // namespace kernels
int main()
{
auto launch_config { cuda::make_launch_config(2,2) };
cuda::launch(::kernels::print_stuff<int>, launch_config);
cuda::outstanding_error::ensure_none();
}
(它使用 cuda-api-wrappers 库)。
程序编译运行。但是,如果我在终端中运行,它什么也不打印; 而如果我通过 nvvp 运行它,控制台会显示:
This is a plain printf() call.
This is a plain printf() call.
This is a plain printf() call.
This is a plain printf() call.
...如预期(2 个 block x 2 个线程 = 4 行)。
我没有在终端上打印四行的原因是什么/可能是什么?
注意事项:
- 我意识到理论上问题可能出在图书馆,我是图书馆的作者。所以“它必须是图书馆”是一个合理的答案,但你需要解释为什么它不能是其他任何东西。
- 使用
nvcc -Xcompiler -Wall -Xcompiler -Wextra
编译时没有警告。 - 我使用 Devuan GNU/Linux 3(beowulf;相当于 Debian Buster)。
- 我的硬件:AMD64 Intel CPU;一张 GTX 1050 Ti 卡。
- nVIDIA 驱动程序版本:430.50; CUDA 版本:10.1.105。
cuda-memcheck
不提示程序。