加速位图灰度转换,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() == DialogRe
0 2024-04-11
编程技术问答社区
突破openmp中的结构化块
我正在尝试使用OpenMP编写一个程序,其中结构块为一个段循环. #pragma omp parallel num_threads(x) while(condition){ } 我必须决定编码任何线程停止的条件的方法.我需要知道在段循环中有一个断开声明是否合适. 解决方案 您的问题有点不完整.您说的是"任何线程都会停止的条件",但是数学后又如何: 其余线程也应退出. 其余线程应继续直至与条件匹配. 案例1: bool abort = 0; #pragma omp parallel num_threads(x) private(abort) { while(!abort) { // The work you need to do. #pragma omp critical { if(condition==false) { abort =
0 2024-04-10
编程技术问答社区
OpenMP基准测试。我做得对吗?
我制作了一个计算斐波那契序列的程序.我用不同数量的线程执行了它(例如1、2、10),但是执行时间几乎相同(约0.500秒). 我正在使用Ubuntu和GNU GCC编译器上的CodeBlocks.在CodeBlocks中,我链接了库gomp并为编译器定义了标志-fopenmp. #include #include #include int main() { int i, n=1000, a[n]; omp_set_num_threads(4); for(i=0; i
0 2024-04-10
编程技术问答社区
OpenMP导致heisenbug segfault
我试图在OpenMP中平行一个非常庞大的for-loop.大约有20%的时间运行良好,但是剩下的时间与各种segfault崩溃(例如; ) *** glibc detected *** ./execute: double free or corruption (!prev): *** *** glibc detected *** ./execute: free(): invalid next size (fast): *** [2] segmentation fault ./execute 我的一般代码结构如下; #pragma omp parallel private(list of private variables which are initialized in for loop) shared(much shorte
0 2024-04-10
编程技术问答社区
OpenMP-for循环线程分配
假设我有一个带有索引0..n-1的数组.有没有办法选择每个线程将处理哪些单元格?例如线程0将处理单元格0和5,螺纹1将处理单元1和6,依此类推.. 解决方案 您甚至可以更加明确: #pragma omp parallel { int nth = omp_get_num_threads(); int ith = omp_get_thread_num(); for (int i=ith; i #inclu
0 2024-04-10
编程技术问答社区
实时计算运行时间的差异
我有以下问题:我必须测量需要执行程序的时间.该程序的标量版与下面的代码效果很好,但是当使用OpenMP时,它可以在我的PC上使用,但在我应该使用的资源上不使用. 实际上: 标量程序RT 34S OpenMP程序RT 9S 那是我的PC(所有工作) - 与Visual Studio相符 我必须使用的Ressource(我认为Linux,与GCC一起编译): 标量程序RT 9S OpenMP程序RT 9S(但是文本后来立即弹出,因此应该是0-1S) 我的gues是,它添加了所有tick,这大约相同,并以单个核心的tick速度使它们脱颖而出.我的问题是如何解决这个问题,如果有一种更好的方法来观看c. 上的游戏机中的时间 clock_t start, stop; double t = 0.0; assert((start = clock()) != -1); ... code running t = (dou
4 2024-04-10
编程技术问答社区
没有线程本地拷贝的OpenMP还原阵列
我希望打开 大型 阵列中的 .例如,其中 large[] = {1, 1, 1, 2, 2, 2, 3, 3, 3}; // OpenMP reduce length-3 sublists of large, to produce: small[] = {3, 6, 9}; 我的要求类似于这个问题,但是我还有重要的其他约束: 必须支持OpenMP 3.1(因此我不能使用OpenMP 4.5的阵列减少,例如这个答案 li> 不能有small的线程捕集副本(例如 this Answer ),因为small可以是与large一样大,因此线程私有的副本可能会导致堆栈溢出 large数组必须按顺序迭代,以使其良好的缓存(因为它可能是非常大的) 其他一些细节: large的总元素不一定是相邻的 这种减少发生在功能中. small(输出)数组由用户预先分配,并通过引用传递.理想情况下,该功能不应分配small> 的新本地副本 small和large具有2的幂的长度
0 2024-04-09
编程技术问答社区
OpenMP并行化高效
我试图用数字求解一个二维泊松方程,并使用约200x200网格.我正在尝试实施对角线方法以启用并行性: #include #include #include #include int xf = -1; int xl = 1; int yf = -1; int yl = 1; double delta = 0.01; double q(int i, int j) { return (4 - 2 * (pow(xf + j * delta, 2) + pow(yl - i * delta, 2))) * pow(delta, 2); } double actual(double x, double y, int n) { return (pow(x, 2) - 1) * (pow(y, 2) - 1); } double error(double **mk, double **
12 2024-04-09
编程技术问答社区
如何设置OpenMP?
我正在使用CodeBlocks,必须运行OpenMP C程序.因此,我在CodeBlocks(编译器设置)中添加了flag -fopenmp,现在正在获取' mingw32 -g ++的错误.EXE:exe:libgomp.spec.spec:no这样的文件或目录' 因此,在Internet上进行了一些搜索后,我下载了TDM-GCC(安装在C:\ TDM-GCC-64中).但是在CodeBlocks上仍显示同样的错误. 我在做什么错? 这是构建日志: mingw32 -gcc.exe -c" d:\语言文件\ matrixmultiplication.c" -o" d:\ language files \ matrixmultiplication.o" mingw32 -g ++.exe-o" d:\语言文件\ matrixmultiplication.exe"" d:\语言文件\ matrixmultiplication.o" -fopenmp ming
0 2024-04-09
编程技术问答社区
OpenMP执行创建任务的顺序
我是OpenMP的新手,认为我的用例并不简单 - 因此在方法上寻找指针. 是否有一种方法可以在OpenMP中产生这些任务? 我想要实现的是如下 我的数据是包含序列编号和传感器ID的数据包. 必须为每个传感器ID保持序列编号的顺序,但可以并行执行不同的传感器ID. 在伪代码中 - 因此,请原谅语法.我正在寻找概念的理解. #pragma parallel for ordered for data in data_packet_by_sequence #pragma task nowait omp_set_lock(data.sensor_id) process_data(data) // must execute in order of data.sequence omp_unset_lock(data.sensor_id) ,但问题是过程数据可能是按序列安排的,该序列不符合数据包的顺序 如何执行当处理传感器数据时,它会
2 2024-04-09
编程技术问答社区
在emacs中作为C/C++代码缩进openmp指令
在以前的问题,我学会了如何学会缩进宏作为emacs上的常规C代码.我只需要这是因为#pragma omp openMP的指令,但是我想维护所有其他类型的宏,例如#if和#endif,缩进为默认值. (c-set-offset (quote cpp-macro) 0 nil) 上面的规则将所有宏视为相同.我的问题是:有没有办法专门研究此规则? 解决方案 如果您查看M-x describe-variable c-offsets-alist,它定义了代表各种编程语言的句法构造的变量列表,您只会看到cpp-macro和cpp-macro-cont,分别代表宏和持续宏.该列表在#pragma之间没有说明和说,#if. 因此,没有直接的方法可以从其他指令中告诉#pragma
0 2024-04-09
编程技术问答社区
使用Stackoverflow.com上以前的代码的问题--用OpenMp进行C语言的生命游戏
我试图在视觉工作室IDE中复制这篇文章中的代码,即使我没有更改代码的任何部分,也会遇到一些错误.该代码来自这篇文章 - with OpenMP 的生活游戏 这是帖子中的代码 - // Swapping the two grids #define SWAP_BOARDS( b1, b2 ) do { \ char* temp = b1; \ b1 = b2; \ b2 = temp; \ } while(0) // Simplifying access to grid elements #define BOARD( G, X, Y ) ((G)[NC*(X)+(Y)]) char* sequential_game_of_life (char* outgrid, char* ingrid, const int nrows, const int ncols, const int gens_max) { const int NC =
0 2024-04-09
编程技术问答社区
OpenMP中奇怪的浮动行为
我正在运行以下OpenMP代码 #pragma omp parallel shared(S2,nthreads,chunk) private(a,b,tid) { tid = omp_get_thread_num(); if (tid == 0) { nthreads = omp_get_num_threads(); printf("\nNumber of threads = %d\n", nthreads); } #pragma omp for schedule(dynamic,chunk) reduction(+:S2) for(a=0;a
0 2024-04-09
编程技术问答社区