标签: openmp

加速位图灰度转换,OpenMP是C#中的一个选项吗?

请帮助我使用openmp使这个代码并行这个代码是在按钮点击运行,文本框是128

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace IMG
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    string path = "";
    public void openimage()
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            path = openFileDialog1.FileName;
            Graphics g = this.CreateGraphics();
            g.Clear(this.BackColor);
            Bitmap curBitmap = new Bitmap(path);
            g.DrawImage(curBitmap, 200, 220, 200, 200);
        }
    }
    Bitmap bm;
    Bitmap gs;
    private void button1_Click(object sender, EventArgs e)
    {
        if (path == "") …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing image-processing openmp

0
推荐指数
1
解决办法
3305
查看次数

OpenMP:并行(i; ...)和i值

我有一个以下并行片段:

#include <omp.h>
#include "stdio.h"

int main()
{

omp_set_num_threads(4);
    int i;
#pragma omp parallel private(i)
    {
#pragma omp for 
        for(i = 0;i < 10; i++) {
            printf("A  %d: %d\n", omp_get_thread_num(),i);
        }
#pragma omp critical
        printf("i  %d: %d\n", omp_get_thread_num(), i ); 
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为在循环之后,每个线程将i等于i线程循环中的最后一个值.我想要的输出是:

A  0: 0
A  0: 1
A  0: 2
A  3: 9
A  2: 6
A  2: 7
A  2: 8
A  1: 3
A  1: 4
A  1: 5
i …
Run Code Online (Sandbox Code Playgroud)

c c++ openmp

0
推荐指数
1
解决办法
197
查看次数

OpenMP:首先完成第一次迭代

我有一个C parallel for循环,包括一行

b[i] = b[0];
Run Code Online (Sandbox Code Playgroud)

所以我需要在开始任何其他迭代之前完成第一次迭代.是否有强制执行此类行为的条款?

c loops for-loop openmp

0
推荐指数
1
解决办法
88
查看次数

openmp - 用于文本文件读取和使用管道的while循环

我发现openmp不支持while循环(或者至少不太喜欢它们).而且也不喜欢'!='运算符.

我有这段代码.

int count = 1;
#pragma omp parallel for
    while ( fgets(buff, BUFF_SIZE, f) != NULL )
    {
        len = strlen(buff);
        int sequence_counter = segment_read(buff,len,count);
        if (sequence_counter == 1)
        {
            count_of_reads++;
            printf("\n Total No. of reads: %d \n",count_of_reads);
        }
    count++;
    }
Run Code Online (Sandbox Code Playgroud)

关于如何管理这个的任何线索?我在某处读到(包括stackoverflow的另一篇文章)我可以使用管道.那是什么 ?以及如何实施它?

c parallel-processing hpc openmp

0
推荐指数
1
解决办法
8703
查看次数

如何在lsf中启动多线程mpi进程?

我想用LSF提交一份工作:

  • 并行运行在4个节点上
  • 每个节点都有一个mpi进程
  • 每个进程有12个线程

在没有LSF的情况下,我只需在4个节点上启动mpi,例如:

mpirun -hosts host1,host2,host3,host4 -np 4 ./myprocess --numthreads = 12

但是,在LSF存在的情况下,我看不出怎么做?我确信这可能是一种非常标准的方法,但我对LSF来说还是个新手.我用Google搜索,但答案对我来说并不是很明显.我在LSF中发现了混合MPI/OpenMP,但它似乎并不完全相同,似乎一次只需要一台主机.

multithreading distributed-computing mpi openmp lsf

0
推荐指数
1
解决办法
4086
查看次数

并行化矩阵按行和按行使用OpenMP按行计算

对于我的一些家庭作业,我需要通过向量实现矩阵的乘法,按行和列并行化.我确实理解行版本,但我在列版本中有点困惑.

假设我们有以下数据:

Matix时代矢量

行版本的代码:

#pragma omp parallel default(none) shared(i,v2,v1,matrix,tam) private(j)
  {
#pragma omp for
    for (i = 0; i < tam; i++)
      for (j = 0; j < tam; j++){
//        printf("Hebra %d hizo %d,%d\n", omp_get_thread_num(), i, j);
        v2[i] += matrix[i][j] * v1[j];
      }
  }
Run Code Online (Sandbox Code Playgroud)

这里的计算是正确的,结果是正确的.

列版本:

#pragma omp parallel default(none) shared(j,v2,v1,matrix,tam) private(i)
  {
    for (i = 0; i < tam; i++)
#pragma omp for
      for (j = 0; j < tam; j++) {
//            printf("Hebra %d hizo %d,%d\n", omp_get_thread_num(), i, …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing openmp

0
推荐指数
1
解决办法
2582
查看次数

用LLVM编译的omp程序中的omp_outlined

使用LLVM clang ++ 4.9.2使用OMP指令编译cpp程序时,我看到了隐藏函数@ .omp_outlined。是在位码中生成的。我想知道这个隐藏函数是什么,是否有可能避免生成它。

openmp llvm llvm-clang

0
推荐指数
1
解决办法
232
查看次数

OpenMP并行不能按预期工作

我有简单的程序:

int index;
unsigned int count = 0;

#pragma omp parallel for
for (index = 0; index < 10000; index++)
{
    count++;
}
Run Code Online (Sandbox Code Playgroud)

问题是我认为count应该等于10000.但是它通常在5000左右.大约10%它等于10000.

这里发生了什么?

parallel-processing for-loop openmp

0
推荐指数
1
解决办法
492
查看次数

C ++致命错误C1001:使用openMP的编译器发生内部错误

我有一个可以解决数独难题的程序,并且可以按顺序工作,但是现在我正在尝试使用openMP对其进行并行化。该函数solvePuzzle()包括算法,我想在其中并行化for循环,但是当我#pragma omp parallel for在for循环之前添加语句时,出现此错误: fatal error C1001: An internal error has occurred in the compiler.

该函数的代码是solvePuzzle()

    bool sudoku::solvePuzzle(int grid[CELL][CELL]) {
        int row, col;

        if (!findEmptyCell(grid, row, col))
            return true; 
    #pragma omp parallel for
        for (int num = 1; num <= 9; num++) {
            if (checkAccuracy(grid, row, col, num)) {
                grid[row][col] = num;

                if (solvePuzzle(grid))
                    return true;

                grid[row][col] = EMPTY_CELL;
            }
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

这是主要驱动程序,如果有帮助的话:

#include "SudokuGrid.h"

using namespace std;

int main() {

    sudoku …
Run Code Online (Sandbox Code Playgroud)

c++ openmp visual-studio visual-c++

0
推荐指数
1
解决办法
1038
查看次数

我可以计算多线程数的平均值吗?

我在C++中使用多线程函数.使用n多线程,我有n随机输出.我需要计算代码中多线程输出的平均值.让我们假设n=4线程,代码是

#include <omp.h>
#include <unistd.h>
#include <stdio.h>
#include <random>
#include <iostream>
#include <cmath>
#include <iomanip>
#include <array>
#include <eigen3/Eigen/Dense>

#define         W               1.0
#define         avg_disorder    10
#define         numThd          4

int main()
{
  #pragma omp parallel num_threads(numThd)
  {
    // define random numbers
    std::mt19937 rng;                  
    std::uniform_real_distribution <> dist;
    std::random_device r;
    std::array<int,624> seed_data;
    std::generate(seed_data.begin(), seed_data.end(), std::ref(r));
    std::seed_seq seq(std::begin(seed_data), std::end(seed_data));
    rng.seed(seq);

    Eigen::Array<double, -1, 1> rp; // rp= random potential
    rp  = Eigen::Array<double, -1, 1>::Zero(avg_disorder, 1);

    //List of 10 random …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading openmp

0
推荐指数
1
解决办法
208
查看次数