【问题标题】:c++ AMP Concurrency::runtime_exception occurs when creating array_viewc++ AMP Concurrency::runtime_exception 在创建array_view时发生
【发布时间】: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 有一半以上的时间。

标签: c++ c++-amp


【解决方案1】:

发生错误,因为 oupR,outpC 值为 0。抱歉问了一个不好的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多