简单地将 OpenMp Parallel for 转换为 c# Parallel for

2024-03-02

你好,我正在将这个 c++ ( openmp ) 并行转换为 c# 并行,但它说:

错误 1 ​​并非所有代码路径都返回 lambda 表达式类型的值 'System.Func<int,System.Threading.Tasks.ParallelLoopState,int,int>'

这是我的代码:

c++

void floyd_warshall(int NumOfThreads) {
    int i, j, k;

    omp_set_num_threads(NumOfThreads);
    for (k = 0; k < n; ++k)
        #pragma omp parallel for private(i,j)
        for (i = 0; i < n; ++i)
            for (j = 0; j < n; ++j)
                /* If i and j are different nodes and if
                    the paths between i and k and between
                    k and j exist, do */
                if ((dist[i][k] * dist[k][j] != 0) && (i != j))
                    /* See if you can't get a shorter path
                        between i and j by interspacing
                        k somewhere along the current
                        path */
                    if ((dist[i][k] + dist[k][j] < dist[i][j]) || (dist[i][j] == 0))
                        dist[i][j] = dist[i][k] + dist[k][j];
}

c#

 void floyd_warshall(int NumOfThreads)
        {
            int  k;
            ParallelOptions pOp;
            pOp.MaxDegreeOfParallelism = NumOfThreads;

            for (k = 0; k < n; ++k)
             Parallel.For<int>(0, n, pOp , () => 0, (i, loop, j) =>
                 {   //  for (i = 0; i < n; ++i)
                     for (j = 0; j < n; ++j)
                         /* If i and j are different nodes and if
                             the paths between i and k and between
                             k and j exist, do */
                         if ((dist[i, k] * dist[k, j] != 0) && (i != j))
                             /* See if you can't get a shorter path
                                 between i and j by interspacing
                                 k somewhere along the current
                                 path */
                             if ((dist[i, k] + dist[k, j] < dist[i, j]) || (dist[i, j] == 0))
                                 dist[i, j] = dist[i, k] + dist[k, j];
                 }, (j) => 0);
        }

您可以使用更简单的重载Parallel.For不需要您的委托有返回值的方法。

    var pOp = new ParallelOptions { MaxDegreeOfParallelism = NumOfThreads };

    for (int k = 0; k < n; ++k)
        Parallel.For(0, n, pOp, i =>
        {   //  for (i = 0; i < n; ++i)
            for (int j = 0; j < n; ++j)
                /* If i and j are different nodes and if
                    the paths between i and k and between
                    k and j exist, do */
                if ((dist[i, k] * dist[k, j] != 0) && (i != j))
                    /* See if you can't get a shorter path
                        between i and j by interspacing
                        k somewhere along the current
                        path */
                    if ((dist[i, k] + dist[k, j] < dist[i, j]) || (dist[i, j] == 0))
                        dist[i, j] = dist[i, k] + dist[k, j];
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单地将 OpenMp Parallel for 转换为 c# Parallel for 的相关文章

随机推荐

  • 强制惰性实体加载真实实例

    我有一个惰性实体的代理 它是通过加载子实体在会话中创建的 对父实体的后续提取仅返回 NH 代理 我需要实际实例来检查类型 实体已加入子类 我一定错过了一些东西 但我找不到办法做到这一点 Session Refresh proxy 似乎没有帮
  • “单页”JS网站和SEO

    现在有很多很酷的工具可以用来制作强大的 单页 JavaScript 网站 在我看来 正确的做法是让服务器充当 API 仅此而已 并让客户端处理所有 HTML 生成内容 这种 模式 的问题在于缺乏搜索引擎的支持 我可以想到两种解决方案 当用户
  • 有条件地解析 Unity 中的命名实现

    Unity 允许您命名同一接口的不同实现 然后按名称解析它们 var container new UnityContainer register container Register
  • “overflow-y:scroll”属性是否有助于防止 Opera/Safari 中的水平移动?

    我在 CSS 中使用以下内容来强制 Firefox 中的垂直滚动条 body overflow y scroll 这个技术在 Safari 和 Opera 中有效吗 有人说是 有人说不然 CSS 规则overflow y scroll为我工
  • c中如何使用fgets()通过用户输入来控制while循环的执行?

    我正在尝试用 c 编写一个程序 其中我可以通过来自标准输入的用户输入来控制 while 循环的执行 我已经通过 scanf 和 getchar 函数成功完成了它 现在我尝试使用广泛推荐使用的 fgets 函数而不是 scanf 函数来复制此
  • ModuleNotFoundError:没有名为“word2number”的模块错误

    使用命令安装 word2number 时 from word2number import w2n 我在使用 Google Colab 时收到此错误 ModuleNotFoundError 没有名为 word2number 的模块错误 我可以
  • 将 Azure SDK 从 2.4 升级到 2.6 后生成错误

    我刚刚使用项目属性 gt 应用程序下的升级功能将我的 Web 角色项目 和解决方案 从 Azure SDK 2 4 升级到 Azure SDK 2 6 当我构建应用程序时 一切正常 但是当我尝试运行它 并启动 Azure 模拟器等 时 如果
  • 带有 envmap 的 Aframe gltf-model 演示

    在aframe中加载GLTF 模型非常方便 但没有发现包含envmap纹理的案例 我希望官方能提供与三位官方相同的案例 pmremGenerator fromEquirectangular texture 函数用于使gltf模型产生真实的反
  • Amazon S3 - 使用 Java API 批量文件上传?

    我们希望开始使用 S3 来满足我们的一些存储需求 并且我正在寻找一种方法来执行 N 个文件的批量上传 我已经使用 Java API 编写了代码来执行单个文件上传 但是有没有办法提供要传递到 S3 存储桶的文件列表 我确实看过以下问题是否可以
  • 如何防止 css 转换为内联 css

    我正在使用 jquery 在按下按钮时修改 div 元素的 css 我注意到 css 内联到 HTML 中 如何防止样式内联 这些样式标签出现在渲染时 链接您的stylesheet in head
  • Eclipse 对于 g++ 不返回的代码返回错误

    构建简单的代码 示例如下 在 eclipse 上返回错误 而命令行中的 g 不会返回错误 eclipse 和 g 都输出可执行文件 其行为相同 并且结果符合我的期望 当代码不像我所展示的示例那样简单时 这会很痛苦 任何想法表示赞赏 环境 E
  • 如何拆分专有名称?

    我有一份来自 AD 的人员及其 DN 列表 我无法直接访问该 AD 他们的 DN 格式为 DNList CN Bob Dylan OU Users OU Dept OU Agency OU NorthState DC myworld DC
  • 检查列表中是否存在值为 x 的namedtuple

    我想查看列表中是否存在命名元组 类似于 numbers 1 2 3 4 5 if 1 in numbers do stuff 有没有Pythonic 或没有 的方法来做到这一点 就像是 namedtuples namedtuple 1 na
  • NSURL 中的 CGImage 有效,但 UIImage 中无效

    我在对图像应用滤镜时遇到一些问题 使用 CIImage imageWithContentsOfURL 时 以下代码完美运行 NSInteger filterIndex UITapGestureRecognizer sender view t
  • 更改画布中像素的颜色、Tkinter、Python

    有人知道是否可以在不使用 un 对象的情况下更改画布中像素的颜色 因此无需使用类似的东西canvas create oval or canvas create rectangle 除了创建某种 1x1 像素对象之外 没有其他方法可以为像素着
  • 错误:在初始化尝试调用方法“值”之前无法调用滑块上的方法

    我写了类似下面的东西 id为 PLUS I的div的onclick 我收到以下错误 cannot call methods on slider prior to initialization attempted to call method
  • 使用 mpi4py 接收多个发送命令

    如何修改以下代码 改编自http materials jeremybejarano com MPIwithPython pointToPoint html http materials jeremybejarano com MPIwithP
  • matlab中传递和保存匿名函数

    我想要一个函数 例如 一个 fit 函数 返回一个匿名函数 通常存储在struct 我可以保存并稍后使用 然而 路过 func倾向于传递函数指针而不是函数本身 是一个inline函数是做到这一点的唯一方法吗 我想避免inline因为它非常慢
  • Django 选择字段

    我正在尝试解决以下问题 我的网页只能看到版主 此页面显示的字段 用户注册后 用户名 名字 姓氏 电子邮件 状态 相关性等 我需要显示带有此字段的数据库中存储的所有用户信息的表 但其中两个字段有选择 所以我想做出一个选项 版主可以选择另一个选
  • 简单地将 OpenMp Parallel for 转换为 c# Parallel for

    你好 我正在将这个 c openmp 并行转换为 c 并行 但它说 错误 1 并非所有代码路径都返回 lambda 表达式类型的值 System Func