【发布时间】:2020-12-31 14:56:11
【问题描述】:
我想用 C++ AMP 执行 maxPool。但是,每当我执行代码时,我都会遇到意外的运行时异常,程序就会被终止。
这是部分代码:
PoolLayer.h:
class PoolLayer : public Layer {
private:
const int outpR, outpC, pR, pC, inpR, inpC, depth;
std::vector<int> r_coordinate, c_coordinate;
Tensor forwardPassGPU(const Tensor& input) override;
}
PoolLayer.cpp:
Tensor PoolLayer::maxPoolGPU(const Tensor& input, int depth) {
Tensor ret(depth, outpR, outpC);
array_view<double, 3> aret(depth, outpR, outpC, ret.list); // exception occurs
array_view<const double, 3> ainput(depth, inpR, inpC, input.list); // exception doesn't occur
array_view<int, 3> ar_coord(depth, outpR, outpC, r_coordinate); // exception occurs
array_view<int, 3> ac_coord(depth, outpR, outpC, c_coordinate); // exception occurs
// ... do maxpool
}
Tensor 是我创建的一个类,它具有向量类型变量“list”。当我执行此代码时,我收到如下错误:Microsoft C++ 异常:Concurrency::runtime_exception,内存位置 0x00D3F5A0。目前我正在使用 Visual Studio 2019,std:c++17 编译器。此外,我在命令行中添加了 /Zc:noexceptTypes- 以避免任何动态异常问题。有没有办法解决这个问题?
【问题讨论】:
-
PoolLayer.h 也有 maxPool 函数,Tensor maxPoolGPU(const Tensor& input, int depth)。
-
minimal reproducible example 需要。这并不意味着复制/粘贴所有代码,它意味着逐段减少代码,检查每个步骤是否仍然发生异常,直到它最小并且仍然发生异常。
-
@Yakk-AdamNevraumont 谢谢!我找到了导致错误的原因。发生错误,因为 outpR,outpC 值为 0。
-
制作 mcve 有一半以上的时间。