【问题标题】:Visual Studio Fortran Stuck at Reassigning values from one variable to anotherVisual Studio Fortran 卡在将值从一个变量重新分配给另一个变量
【发布时间】:2018-08-17 13:39:40
【问题描述】:

见附件截图。

我运行代码,在断点处停止,然后按 F11 执行这些步骤,直到行 ccs2 = ccs2_2。

我检查了这两个变量具有相同的维度、相同数量的实际具有值的元素(它们都是 6x6x10000,只有前 6x6x219 元素具有值)。

我之前运行过这个算法,我从来没有遇到过这个问题。您在屏幕截图中看到的是,当我按 F11 尝试执行 ccs2 = ccs2_2 时,Visual Studio 卡在这一点上,没有错误,也没有通知似乎永远(每次尝试至少 10 分钟)。

我检查了我没有任何内存或 CPU 问题。当我从顶部暂停执行时,进度标记返回到该行,当我检查变量时,我发现前 6x6x219 值现在匹配,但程序不会前进。

更新:我试图将范围限制为具有诸如 ccs2(1:6,1:6,1:219) = ccs2_2(1:6,1:6,1:219) 之类的值的元素。这仍然需要很长时间,但由于某种原因,Visual Studio 报告说只用了 2059 毫秒,但实际时间肯定超过 20 秒。我将堆数组从 0 改回无,新的时间据说是 1978 毫秒,但肯定花了超过 19 秒。

我尝试使用显式循环只为元素分配值,它花费了不到 1 毫秒。

【问题讨论】:

  • 可能仍然是堆栈问题(据我所知,在 Windows 上,堆栈大小仍受程序限制:-()。当您通过循环显式执行分配时会发生什么?
  • @albert 我只是用 ccs2(1:6,1:6,1:219) = ccs2_2(1:6,1:6,1:219) 和之后限制了赋值范围很长一段时间它确实完成了。我目前将堆数组设置为0,可以这样做吗?我会用循环检查显式赋值的速度
  • 我不知道您所说的“我目前将堆数组设置为 0”是什么意思。循环中的分配应该不是问题(只要您使用正确的索引顺序!)。

标签: variables fortran variable-assignment


【解决方案1】:

当您跳过一个巨大的数组赋值语句时,调试器会在内部逐条执行指令,直到语句编号发生变化。我看到你的数组非常大,调试器没有“卡住”,只是需要很长时间才能跨过。

尝试在下一条语句上设置断点并点击 Go。

【讨论】:

  • 你是对的。当我在一个停止点点击 go 时,它照常进行。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多