社区
英特尔边缘计算技术
帖子详情
关于双核并行后的错误
memoryjs
2009-06-11 09:48:13
我用双核并行马太棋盘,用intel编译器后,运行速度是快了,但是出来的结果是错误的,如果不用并行,那么时间会长,但是答案是对的 我用的是 #pragma omp task #pragma omp parallel #pragma omp single 这三个命令并行的 是不是我代码用错 还是什么别的?而且我并行别的程序也是用这三个指令都有错误 ...
...全文
102
15
打赏
收藏
关于双核并行后的错误
我用双核并行马太棋盘,用intel编译器后,运行速度是快了,但是出来的结果是错误的,如果不用并行,那么时间会长,但是答案是对的 我用的是 #pragma omp task #pragma omp parallel #pragma omp single 这三个命令并行的 是不是我代码用错 还是什么别的?而且我并行别的程序也是用这三个指令都有错误 ...
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fanbin23
2009-06-16
打赏
举报
回复
OpenMP官网上有个tutorial链接,另外随便搜搜能找到一些slides,稍微有点概念就行了,看多了也没啥用
https://computing.llnl.gov/tutorials/openMP/
TBB就不知道了
fanbin23
2009-06-15
打赏
举报
回复
看材料其实没啥用,你可以就从这个程序入手,想清楚为什么要这么写,为什么这么用那几个OpenMP directives。弄明白了基本上OpenMP你就懂了一大半了
memoryjs
2009-06-15
打赏
举报
回复
就是弄不懂openMp 和TBB怎么用
memoryjs
2009-06-14
打赏
举报
回复
的确不太理解 我找了一些资料 感觉帮助不大 用了之后速度没有提高多少 要不你推荐一下?
fanbin23
2009-06-14
打赏
举报
回复
看起来你还没理解什么是并行和OpenMP……找一些基本的材料看看吧,具体是什么材料……我现在也想不起来该推荐什么
OpenMP和TBB都是编写并行程序的方式而已
memoryjs
2009-06-13
打赏
举报
回复
这个道理我也知道啊 但是我不并行是对的 并行就错了 我都不知道是哪里错了 要不你也帮忙看看
loadbalancing
2009-06-13
打赏
举报
回复
结果是错误的,则并行没有意义了。首先得保证结果是对的。
memoryjs
2009-06-13
打赏
举报
回复
虽然不是很懂 但是我还是试试看 那么并行程序就是用openmp的命令?还有TBB?
fanbin23
2009-06-13
打赏
举报
回复
没仔细看,但有这么几个建议:
1. 按照你对程序的理解把parallel region中所有用到的变量显示的指明他们的data sharing clause,例如g,h,k,m,n和数组a。如果你用linux,或许你可以试一下Sun Studio OpenMP compiler的autoscoping工具
2. move_chess似乎是个递归函数,或许你应该考虑把parallel single结构拿到递归外面去,只在递归函数里面使用task
memoryjs
2009-06-12
打赏
举报
回复
我贴了代码了 你帮忙看看
memoryjs
2009-06-12
打赏
举报
回复
我是用文件读如的 文件名为hamilton.in 没有tet后缀名 里面的内容是 6 6 1 即是一个6*6上的一个棋盘上 在1这个位置为起点 数字大了 运行时间太长 我用单核这个时间为5秒左右 用双核并行就错了 你可以试试
memoryjs
2009-06-12
打赏
举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void read_file(int *m,int *n,int *p);
int write_file(int *m,int *n);
void draw_chessboard(int *m,int *n);//根据m,n画棋盘
void find_location(int *m,int *n,int *p,int *i,int*j);//根据数值,找出坐标
void move_chess(int i,int j,int k,int m,int n);
int c[32][32],a[32][32];//c是画的棋盘,a是用来记录每一步
int ok=0;//0为不成功,1为成功
main()
{
int m,n,p,i,j;
double d;
time_t begin,end;
a[0][0]=0;
read_file(&m,&n,&p);
printf("%d %d\n",m,n);
printf("%d\n",p);
draw_chessboard(&m,&n);
find_location(&m,&n,&p,&i,&j);
a[i][j]=1;//初始化,使得得到的坐标为第一步
begin=clock();
move_chess(i,j,2,m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ printf(" %d ",a[i][j]);
if(j==n-1)
printf("\n");
}
end=clock();
d=(double)(end-begin)/CLOCKS_PER_SEC;
printf("your run time is:%f\n",d);
}
void move_chess(int i,int j,int k,int m,int n)
{
int x,g,h,p=-1;//g记录i的变化,h记录j的变化,p每次运行都要加1,所以定义为负数,用来访问数组
int direction[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};//定义8个方向
do{
p++;
ok=0;
g=i+direction[p][0];
h=j+direction[p][1];
#pragma omp parallel
#pragma omp single
if(g>=0&&g<m&&h>=0&&h<n&&a[g][h]==0){
a[g][h]=k;
if(k<m*n){
#pragma omp task
move_chess(g,h,k+1,m,n);
if(ok==0)
a[g][h]=0;//如果八个方向都不行,从函数退出,并且使原来尝试的一步清零
}
else
for(x=0;x<8;x++)
if((g+direction[x][0])<m&&(g+direction[x][0])>=0&&(h+direction[x][1])<n&&(h+direction[x][1])>=0&&a[g+direction[x][0]][h+direction[x][1]]==1) {
ok=1;break;
}
if(ok==0) a[g][h]=0;
}
}while(ok==0&&p!=7);
}
void find_location(int *m,int *n,int *p,int *i,int *j)
{
int k=0;
for((*i)=0;(*i)<*m;(*i)++)
{
for((*j)=0;(*j)<*n;(*j)++)
if(c[*i][*j]==*p){
k=1;
break;
}
if(k==1)
break;
}
// printf("%d %d\n",*i,*j);
}
void read_file(int *m,int *n,int *p)
{
FILE *fp;
if((fp=fopen("hamilton.in","r"))==NULL){
printf("Opent the hamilton.in file fail!\n");
exit(0);
}
fscanf(fp,"%d",m);
fscanf(fp,"%d",n);
fscanf(fp,"%d",p);
}
void draw_chessboard(int *m,int *n)
{
int i,j,s,count=0;
s=(*m)*(*n);
for(i=0;i<*m;i++)
for(j=*n-1;j>=0;j--)
{
c[i][j]=s-1;
s--;
}
/* for(i=0;i<*m;i++)
for(j=0;j<*n;j++)
{
printf(" %d ",c[i][j]);
count++;
if(count==8){
printf("\n");
count=0;
}
}*/
}
帮忙看看 哪里错了
无天
2009-06-12
打赏
举报
回复
代码?
fanbin23
2009-06-12
打赏
举报
回复
Thread Checker
Thread Inspector
Sun Studio Thread Analyzer
贴代码
....
denghui0815
2009-06-11
打赏
举报
回复
估计你有需要同步的数据访问没有做同步
Zynq7000系列
双核
同时运行调试工程及文档说明
一、Zynq7000架构与
双核
并行
处理 Zynq7000系列的核心部分是由两个ARM Cortex-A9核心组成的处理系统(Processing System,PS),它们可以独立运行,也可以通过共享的存储器进行通信。这种架构允许开发者在一个系统中...
nios ii
双核
例子
- 软件代码(ELF文件)需要烧写到
并行
FLASH中,以便在掉电后仍然可以保存程序。 **2. 联合调试** - 在Nios IDE中,首先通过JTAG口下载SOF文件到FPGA中。 - 创建两个调试工程文件,分别对应CPU_0和CPU_1的工程。 - ...
释放多核潜能.英特尔Parallel.Studio
并行
开发指南
2. Inspector:这是一个线程调试器,用于发现
并行
程序中的线程
错误
,如死锁、竞争条件等。它能帮助开发者调试那些在串行程序调试器中难以发现的问题。 3. C++ Compiler:英特尔Parallel Studio还提供了C++编译器,...
workspace_forF28377D-
双核
例程.rar
4. **
并行
算法实现**:
双核
环境下,可以实现
并行
算法,如
并行
FFT,这在处理大量数据时能显著提高速度。通过实例,开发者可以学习如何设计和优化这样的
并行
算法。 5. **软件开发工具的使用**:TI提供了集成开发环境...
汽车片上系统及
双核
架构
如果两个核心的输出结果不一致,则触发
错误
检测机制,提高系统的可靠性和安全性。 2. **去耦
并行
模式(Decoupled Parallel Mode)**:两个核心执行不同的任务,但通过共享资源和同步机制来协调工作。这种模式适用...
英特尔边缘计算技术
567
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章