【发布时间】:2016-05-10 23:37:16
【问题描述】:
我有 2 个执行相同计算的 mexfucntions(1 个 C++ 和 1 个 CUDA),我正在对它们进行比较。
现在我正在处理 CUDA mexfucntion,我需要在 .txt 上打印某些值才能执行调试。我在 C++ mexfunction 中使用了相同的过程,它工作正常。现在在 CUDA 代码中它不起作用,甚至导致 MatLab 崩溃。
我主要使用以下简单代码:
std::ofstream test;
test.open("test.txt");
test << "test";
test << "\n";
test.close();
代码没有放在 CUDA 内核中,因为我已经知道我不能从全局函数调用广告主机函数。代码位于在 CPU 上运行的 main 中。 sintax 必须与 C++ mexfunction 相同,实际上它是.. 但在 C++ 上有效,而在这里却没有。
创建了文件“test.txt”,但上面没有写任何东西......所以错误就在这里,我确信这一点,因为我试图评论每一个命令,而总是让 matlab 崩溃的是这个:
test.open("test.txt");
MatLab error is always the same, an access violation, as you can see in this screenshot
你有什么想法吗?
谢谢!
【问题讨论】:
-
如果它不是 cuda 函数,那么它不是 cuda 问题,imo
-
好吧,上面提到的一段代码位于 CUDA mexfunction 中,所以我认为它是!也因为 C++ mexfunction 中的相同代码工作得很好..所以问题必须与 CUDA 相关
-
可能你在哪里提到我的句子“代码没有放在 CUDA 内核中”......好吧......阅读所有帖子!它不在内核内部,因为您不能从 CUDA 内核调用主机函数……但它仍在 CUDA mexfunction 内部……
-
@Jonas CUDA 不会修改
std::ofstream的行为,因此应该有其他错误,与 CUDA 无关。请发布重现此错误的 MCVE。 -
@Jonas 能够制作 MCVE 的关键在于它可以帮助您找到问题所在。真的,我正在用 MATLAB 运行 CUDA 代码,你的代码不会抛出任何错误。