我有以下问题。我想让我的用户选择在哪个 GPU 上运行。所以我在我只有一个 GPU(设备 0)的机器上测试如果他们选择了一个不存在的设备会发生什么。
如果我这样做,cudaSetDevice(0);它会工作得很好。
如果我这样做:cudaSetDevice(1);它会崩溃invalid device ordinal(我可以处理这个,因为函数返回错误)。
如果我这样做:cudaSetDevice(0); cudaSetDevice(1);它会崩溃invalid device ordinal(我可以处理这个,因为函数返回错误)。
然而!如果我这样做:cudaSetDevice(1); cudaSetDevice(0);第二个命令返回成功,但在第一次计算时我尝试在我的 GPU 上计算它会崩溃invalid device ordinal。我无法处理这个,因为第二个命令没有返回错误!
在我看来,第一个 cudaSetDevice 会留下一些影响第二个命令的东西?
非常感谢!
解决方案:(感谢罗伯特·克罗维拉!)。我正在处理以下错误:
error = cudaSetDevice(1);
if (error) { blabla }
Run Code Online (Sandbox Code Playgroud)
但显然你需要在 cudaSetDevice(1) 之后调用 cudaGetLastError() 因为否则错误消息不会从某些错误堆栈中删除并且它只是在我为另一个函数执行 cudaGetLastError() 的地方崩溃,即使没有错误这点。
嗨,我想重塑一个矩阵,但重塑命令没有按照我想要的方式对元素进行排序.我有元素的矩阵:
A B
C D
E F
G H
I K
L M
Run Code Online (Sandbox Code Playgroud)
并希望重塑为:
A B E F I K
C D G H L M
Run Code Online (Sandbox Code Playgroud)
所以我知道我想要有多少行(在这种情况下为2),所有2行的"组"应该水平附加.这可以在没有for循环的情况下完成吗?
到目前为止,我一直在使用load函数将我的空格分隔文件加载到matlab中的数组中.然而,这对我来说浪费了很多空间,因为我的值是0或1.因此,不是像写文件那样
0 1 1 0
1 1 1 0
Run Code Online (Sandbox Code Playgroud)
我删除了空格来创建一半大文件,如:
0110
1110
Run Code Online (Sandbox Code Playgroud)
但是现在加载不再正常工作(创建一个矩阵,我想只有第一个数字,所以2x1而不是2x4).我用importdata环顾四周,逐行阅读文件和许多其他东西,但我找不到一个明确的解决方案.所以基本上我想从一个没有分隔符的文件中读取矩阵.每个数字都是数组的一个元素
有谁知道干净的方法吗?谢谢