一般而言,cv::Mat 或 cv::Mat 向量的 omp 缩减

2023-12-02

//In other words, this equilavent to cv::Mat1f mat(5,n)
//i.e. a matrix 5xn
std::vector<cv::Mat1f> mat(5,cv::Mat1f::zeros(1,n));
std::vector<float> indexes(m);
// fill indexes
// m >> nThreads (from hundreds to thousands)
for(size_t i=0; i<m; i++){
  mat[indexes[m]] += 1;
}

预期结果是将每行的每个元素加一。这是一个玩具示例,实际总和要复杂得多。我尝试将其与以下内容并行化:

#pragma omp declare reduction(vec_float_plus : std::vector<cv::Mat1f> : \
            std::transform(omp_out.begin(), omp_out.end(), omp_in.begin(), omp_out.begin(), std::plus<cv::Mat1f>())) \
            initializer(omp_priv=omp_orig);

#pragma omp parallel for reduction(vec_float_plus : mat)
for(size_t i=0; i<m; i++){
    mat[indexes[m]] += 1;
}       

但这会失败,因为每行的每个元素都是随机初始化的。我该如何解决这个问题?

所以我发现问题与this。所以我应该初始化mat with:

std::vector<cv::Mat1f> mat(5);
for(size_t i=0; i<mat.size(); i++)
  mat[i] = cv::Mat1f::zeros(1,n);

但这会产生问题omp_priv = omp_orig,因为它会考虑std::vector<cv::Mat1f> mat(5);它的值是未定义的。我该如何解决这个问题?我想到的唯一解决方案是创建一个包装器结构,例如:

class vectMat{
public:
    vectMat(size_t rows, size_t j){
        for(size_t i=0; i<rows; i++)
            mats.push_back(cv::Mat1f::zeros(1,j));
    }
private:
    std::vector<cv::Mat1f> mats;
};

但是我应该实现什么才能使其与其余代码一起工作呢?


类型如cv::Mat1f,使用引用而不是复制,在这种情况下确实是危险的。您可以通过拆分来制定清晰的显式解决方案parallel地区和for loop.

#pragma omp declare reduction(vec_mat1f_plus : std::vector<cv::Mat1f> : \
            std::transform(omp_out.begin(), omp_out.end(), omp_in.begin(), omp_out.begin(), std::plus<cv::Mat1f>()));
// initializer not necessary if you initialize explicitly

std::vector<cv::Mat1f> mat;
#pragma omp parallel reduction(vec_mat1f_plus : mat)
{
  mat = std::vector<cv::Mat1f>(5);
  for (auto& elem : mat) {
    elem = cv:Mat1f::zeros(1, n);
  }
  #pragma omp for
  for(size_t i=0; i<m; i++){
    mat[indexes[m]] += 1;
  }
}

I haven't tested whether std::plus<cv::Mat1f> works, but it looks good.

你的方法与vectMat如果您提供一个,也将起作用operator=深度复制底层Mat with clone(),并保留初始值设定项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一般而言,cv::Mat 或 cv::Mat 向量的 omp 缩减 的相关文章

  • 当其源是 https uri 时如何使 wpf MediaElement 播放

    在 wpf 独立应用程序 exe 中 我在主窗口中包含了 MediaElement
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 如何对STL向量进行排序?

    我想排序一个vector vector
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo

随机推荐

  • 创建一个安全的 Lua 沙箱..?

    现在我正在做很多事情 local env print print setfenv 函数 环境 然后使用元方法来锁定实例上的属性 但它确实效率低下并且有很多绕过 我用谷歌搜索了它 我发现的一切都与此相同 不起作用 在 Lua 5 1 中 沙箱
  • 尝试将 $element 注入 ng-view 会导致未知提供者错误

    我想知道这是否是一个错误或记录在某处 似乎将 element 注入 ng view 指令附加的控制器失败 这是一个例子 脚本 js controller MainCtrl route routeParams location element
  • MongoDB 游标内存泄漏(OutOfMemory)?

    这就是我读取大型 MongoDB 表的方式 每个对象的属性中都有非常大的数据块 DBCursor cursor collection find my query while cursor hasNext DBObject object cu
  • Google Sheet API 值批量更新,正文中范围数量的限制

    https developers google com sheets api reference rest v4 spreadsheets values batchUpdate 这里的文档没有说明一次调用可以一次更新主体中的多少个范围 有人
  • ThreeJS - 绕对象自身轴旋转

    我试图围绕它自己的轴旋转对象 但没有任何效果 我尝试了文档中的所有函数 欧拉函数等 但它根本不想旋转 您可以使用如下所示的模式在其自身 局部 轴上旋转对象 var axis new THREE Vector3 x y z normalize
  • IOS 中的自定义字体未反映在设备上

    我跟着这个tutorial自定义字体显示在我的故事板上 但是当我执行我的应用程序 在模拟器或设备上 时 字体没有反映出来 谁能帮忙 这就是我所做的 1 downloaded a ttf file and copied it to my pr
  • 监控 JQuery 发出的所有 AJAX 请求?

    有没有办法监视页面上使用 JQuery 发出的所有 ajax 请求 并使用每个请求的结果调用回调函数 例如我发出 ajax 请求 get foo foo bar get bar bar foo 然后 每次完成这些 ajax 请求时 我都会调
  • Robolectric:“未找到 AndroidManifest.xml”和“无法找到资源 ID #0x7f09001b”

    我正在使用 Robolectric 进行一些测试 但遇到了一个无法解决的问题 当我运行测试时 AndroidManifest 出现以下错误 警告 在 AndroidManifest xml 中找不到清单文件 仅回退到 Android 操作系
  • 获取 iPhone 中的运营商详细信息

    如何获取 iPhone 当前使用的运营商详细信息 如 Airtel 或 Idea 等 是否有可能获得这些详细信息 或者有什么方法可以识别我们当前正在使用哪个运营商 我正在开发一个基于运营商的应用程序 如果用户更改他的 SIM 运营商 那么该
  • 如何将 symfony yaml 配置文件转换为 xml 格式?

    我想要将 Symfony 配置文件作为 XML 文件 我知道 symfony 书中有很多代码示例 但并未显示所有配置类型 有没有办法将 Symfony 演示项目提供的现有 YAML 文件转换为 XML 文件以使用这些文件作为基础 我发现了一
  • 无法确定何时隐藏和显示使用 JQuery 的加载动画

    我有一个加载动画 最初隐藏在我的 application js 文件中 loading field hide 我有一个自动完成字段 我希望动画在用户开始输入时出现 并在自动完成建议结果出现时消失 下面是我的 jquery ui 自动完成插件
  • 如何将 BitArray 转换为单个 int?

    我怎样才能转换BitArray到一个单一的int private int getIntFromBitArray BitArray bitArray if bitArray Length gt 32 throw new ArgumentExc
  • x86 操作码有模式吗? (方向和大小位除外)

    许多重要的 x86 指令 例如 MOV 和 ADD 的操作码部分将最后两位标准化为方向位和数据大小位 此处灰色显示的操作码部分是否有任何模式 例如 对于 ADD 某些指令使用代码 000000 而其他指令则使用代码 100000 None
  • 在 Android 中使用 SQLCipher 加密/解密现有数据库

    我使用下面的代码来加密和解密我能够加密的数据库 但是当我尝试解密时 我收到以下异常 我引用了这个文档 and 测试用例太仍然面临同样的问题 例外 sqlite returned error code 26 msg file is encry
  • 将图像保存到小程序中的文件中?

    所以事情是这样的 我正在尝试为网页游戏做一个小程序来生成 自定义 头像 这个头像是针对一个国家的军队的 所以头像取决于用户选择的图像 并且图片上的框架也代表用户所属的四边形 所以我的计划是让他们从计算机上的文件中进行选择 然后他们选择他们所
  • 在 CakePHP 3 中按关联模型的条件查找

    我有两张桌子orders and sub orders 他们的协会是 orders gt hasMany SubOrders foreignKey gt order id 两个表都有invoice no and sub invoice中的列
  • Postgresql 是否在事务中隐式包装 select 语句?

    PostgreSQL 实际上将每个 SQL 语句都视为在事务中执行 如果您不发出 BEGIN 命令 则每个单独的语句都有一个隐式的 BEGIN 和 如果成功 COMMIT 围绕它 From 教程交易 这是否意味着即使 select 语句也会
  • 仅当有免费工人可用时如何生成未来

    我正在尝试将从大文件行中提取的信息发送到某个服务器上运行的进程 为了加快速度 我想并行地使用一些线程来执行此操作 使用 Python 2 7 向后移植并发期货我试过这个 f open big file with ThreadPoolExec
  • 如何避免 UWP TCP 客户端出现延迟?

    我正在尝试在 python 服务器 第一台 PC 和 UWP 客户端应用程序 第二台 PC 之间创建 TCP 客户端 服务器程序 我想模拟一个每 10 毫秒发送一条消息的快速 python 服务器和一个具有更新功能的较慢的 UWP 应用程序
  • 一般而言,cv::Mat 或 cv::Mat 向量的 omp 缩减

    In other words this equilavent to cv Mat1f mat 5 n i e a matrix 5xn std vector