【问题标题】:Error while trying to save on .txt during a CUDA mexfunction in MatLab在 MatLab 中的 CUDA mexfunction 期间尝试保存 .txt 时出错
【发布时间】: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 代码,你的代码不会抛出任何错误。

标签: c++ c matlab cuda


【解决方案1】:

好吧,伙计们,我们意识到在使用 VS2010 创建 CUDA 项目(我的 CUDA 版本为 7.5)时存在兼容性问题。

您根本无法使用标准 C++ iostream 从 CUDA mexfunction 生成 .txt 文件。您必须使用 C 语法,即:

FILE *fp;
fp = fopen("test.txt", "w");
char str[] = "This is a test";
fwrite(str , 1 , sizeof(str) , fp );
fclose(fp);

这里有一个很好的提示:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/155378

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2019-07-19
    相关资源
    最近更新 更多