主题:openmp的并行计算问题
#pragma omp parallel sections
{
#pragma omp section
{
small_emd(result1,new_line1,new_col1,new_result1);
}
#pragma omp section
{
small_emd(result2,new_line1,new_col2,new_result2);
}
#pragma omp section
{
small_emd(result3,new_line2,new_col1,new_result3);
}
#pragma omp section
{
small_emd(result4,new_line2,new_col2,new_result4);
}
}
最近刚接触并行计算,不是很懂啊。
small_emd函数表示对图像的处理,我把图像分成四块分别处理,它们之间没有数据的冲突,但是图像变大之后程序会出错,而且错误指到afxtls.cpp的pRetVal上,不知道是什么意思,我的运行环境是vs2010,而且电脑是16核12G内存,按说16核的电脑分四个线程轻松愉快啊。
对了,我把上面的代码中的section减少到2个的时候,图像再大也不会出错的,难道说可以开的线程和cpu的核不是相互对应的?
后来我猜测openmp是不是只能在一个核上开线程而不是多个核一起并行,我的电脑虽然是16核但是每个核只能开两个线程所以两个section可以跑但是四个section就会出错。
还有就是程序用四个section的时候算小图像是可以的,而且时间也会减为1/4,就是说实现了4个线程的并行,但是图像变大之后就会出错。
情况大体就是上面写的这些,思路有点乱,可能我理解的也不对,各位大神帮帮忙啊[em18]
{
#pragma omp section
{
small_emd(result1,new_line1,new_col1,new_result1);
}
#pragma omp section
{
small_emd(result2,new_line1,new_col2,new_result2);
}
#pragma omp section
{
small_emd(result3,new_line2,new_col1,new_result3);
}
#pragma omp section
{
small_emd(result4,new_line2,new_col2,new_result4);
}
}
最近刚接触并行计算,不是很懂啊。
small_emd函数表示对图像的处理,我把图像分成四块分别处理,它们之间没有数据的冲突,但是图像变大之后程序会出错,而且错误指到afxtls.cpp的pRetVal上,不知道是什么意思,我的运行环境是vs2010,而且电脑是16核12G内存,按说16核的电脑分四个线程轻松愉快啊。
对了,我把上面的代码中的section减少到2个的时候,图像再大也不会出错的,难道说可以开的线程和cpu的核不是相互对应的?
后来我猜测openmp是不是只能在一个核上开线程而不是多个核一起并行,我的电脑虽然是16核但是每个核只能开两个线程所以两个section可以跑但是四个section就会出错。
还有就是程序用四个section的时候算小图像是可以的,而且时间也会减为1/4,就是说实现了4个线程的并行,但是图像变大之后就会出错。
情况大体就是上面写的这些,思路有点乱,可能我理解的也不对,各位大神帮帮忙啊[em18]