问题标签 [openmp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
17332 浏览

c - 如何将 time_t 变量打印为浮点数?

我在 C(openMP 环境)中使用 time_t 变量来保持 cpu 执行时间......我定义了一个浮点值 sum_tot_time 来对所有 cpu 的时间求和......我的意思是 sum_tot_time 是 cpu 的 time_t 值的总和。问题是打印值 sum_tot_time 它显示为整数或长整数,顺便说一下没有小数部分!

我尝试了这些方式:

  1. 将 printf sum_tot_time 作为双精度值作为双精度值
  2. printf sum_tot_time as float 是一个浮点值
  3. 将 printf sum_tot_time 作为 double 作为 time_t 值
  4. 将 printf sum_tot_time 作为浮点数作为 time_t 值
0 投票
2 回答
547 浏览

openmp - OpenMP - 在其中并行运行一些东西,并在其中按顺序运行一些东西

我有这样的场景:

考虑到这是块 A,现在我的代码中有两个类似的块。我想将它们并行放置,所以我使用了 OpenMP 编译指示。但是我无法并行化它,因为在这种情况下我有点困惑哪些变量将是共享的和私有的。如果内部循环中的函数调用是 sum += x 之类的操作,那么我可以添加一个归约子句。一般来说,当我们有一个嵌套的 for 循环,然后另一个内部 for 循环执行主要操作时,如何使用 OpenMP 并行化代码。我尝试声明一个并行区域,然后简单地将 pragma fors 放在块之前,但我肯定错过了一点!

谢谢,萨扬

0 投票
1 回答
1783 浏览

for-loop - 在 omp 并行中划分部分:OpenMP

我有这样的情况:

#pragma omp parallel for private(i, j, k, val, p, l)

感谢阅读,呸!好吧,当我对串行实现使用上述(速度快 3 倍)时,我注意到结果(0.999967[omp] 与 1[serial])的差异非常小。现在我知道我在这里犯了一个错误……尤其是循环之间的联系很明显。是否可以使用 omp 部分将其并行化?我尝试了一些选项,例如制作 shared(p) {这样做,我得到了正确的值,如串行形式},但当时没有加速。

任何关于通过大量 for 循环处理 openmp pragma 的一般建议对我来说也很棒!

0 投票
2 回答
1615 浏览

multithreading - 如何处理 OpenMP 线程池争用

我正在开发一个同时使用粗粒度和细粒度多线程的应用程序。也就是说,我们手动管理线程池上大型工作单元的调度,然后在这些工作单元中,某些功能利用 OpenMP 进行更细粒度的多线程。

我们通过在成本最高的循环中选择性地使用 OpenMP 实现了收益,但担心会在我们将 OpenMP 块添加到成本更低的循环中时为 OpenMP 工作池创建争用。有没有办法向 OpenMP 发出信号,表明如果可用,代码块应该使用池,如果没有,它应该串行处理循环?

0 投票
3 回答
1719 浏览

c++ - 正确使用“原子指令”锁定 STL 容器

我有大量的整数集,我又将它们放入指针向量中。我需要能够在不引起竞争条件的情况下并行更新这些整数集。进一步来说。我正在使用 OpenMP 的“parallel for”构造。

为了处理共享资源,OpenMP 提供了一个方便的“原子指令”,它允许人们在不使用锁的情况下避免对特定内存块的竞争条件。如果我可以使用“原子指令”来防止同时更新我的​​整数集会很方便,但是,我不确定这是否可能。

基本上,我想知道以下代码是否会导致竞争条件

请注意,我使用随机整数作为索引,因为在我的应用程序中,任何线程都可能访问任何索引(在我较大的应用程序中有一个随机元素,但我不需要详细说明)。

我已经看到了一个用于递增 integer 的类似示例,但我不确定它在使用指向容器的指针时是否有效,就像我的情况一样。

0 投票
4 回答
1900 浏览

multithreading - 使用 OpenMP 的无用 printf 无法加速

我刚刚编写了我的第一个 OpenMP 程序,它可以并行化一个简单的 for 循环。我在我的双核机器上运行代码,发现从 1 个线程到 2 个线程时速度有所提高。但是,我在学校的 linux 服务器上运行了相同的代码,并没有看到加速。在尝试了不同的事情之后,我终于意识到删除一些无用的 printf 语句会导致代码显着加速。下面是我并行化的代码的主要部分:

我猜想 printf 的实现有很大的开销,OpenMP 必须与每个线程重复。是什么导致了这种开销,为什么 OpenMP 不能克服它?

0 投票
1 回答
881 浏览

visual-studio-2008 - VC++ 2008、2010 中的 OpenMP 实现

根据实现的不同,OMP 对于并行化相当任意的代码位非常有用——例如,调用两个独立方法的方法中的并行部分——或者它可能很糟糕。我认为这取决于线程是如何创建/缓存的。

VC++ 2008 实现是如何工作的?2010 年的实施在功能和性能/灵活性方面是否有显着差异?

0 投票
2 回答
754 浏览

c++ - mex中的openmp:stackoverflow错误

我有以下部分代码让我遇到堆栈溢出错误

在 shared 中声明的变量是由 malloc 创建的。它们消耗大量内存

关于上述代码有2个问题。1)为什么在进入并行for循环之前会产生堆栈溢出错误(即分段错误)?它在顺序模式下运行时工作正常...... 2)我是否有权为每个线程动态分配内存,如上面的“normalized_p_gn”?

问候埃德温

0 投票
9 回答
57053 浏览

openmp - OpenMP 中的 SECTIONS 指令如何分发工作?

在 OpenMP 中使用时,线程会被分配到部分omp sections内的块中,还是将每个线程分配给每个部分?

什么时候nthreads == 3

输出:

但是当我执行以下代码时:

输出:

从这些输出中,我无法理解 OpenMP 中节的概念是什么。

0 投票
2 回答
5107 浏览

c++ - 为什么不允许无符号 OpenMP 索引变量?

我的 C++/OpenMP 代码中有一个循环,如下所示:

当我编译它(使用 Visual Studio 2005)时,我收到以下错误:

error C3016: 'i' : index variable in OpenMP 'for' statement must have signed integral type

我了解发生错误是因为i未签名而不是已签名,并且更改i为已签名删除了此错误。我想知道为什么这是一个错误?为什么不允许无符号索引变量?查看此错误的MSDN页面没有给我任何线索。