我在1小时前创建了一个问题,但问得不好,所以我重新创建了一个。
我在C中得到了Jacobi放松的代码:
while ( error > tol && iter < iter_max ) {
error = 0.0;
for( int j = 1; j < n-1; j++)
{
for( int i = 1; i < m-1; i++ )
{
Anew[j][i] = 0.25 * ( A[j][i+1] + A[j][i-1]
+ A[j-1][i] + A[j+1][i]);
error = fmax( error, fabs(Anew[j][i] - A[j][i]));
}
}
for( int j = 1; j < n-1; j++)
{
for( int i = 1; i < m-1; i++ )
{
A[j][i] = Anew[j][i];
}
}
if(iter % 100 == 0) printf("%5d, %0.6f\n", iter, error);
iter++;
}
我用以下方式运行:
我已将此代码与OpenACC并行化。现在,我想使用MPI来了解它是如何工作的。但是,对于我做的第一个实现,我没有很好的结果(新数组没有很好的构造)。如何将此代码段与MPI并行化?
答案 0 :(得分:0)
这是我为类似案例编写的代码,您可以将其用作指南。
void calImage(float **image, float **newImage, float **edge, \
int rows, int cols) {
int i, j;
for (i = 2; i < rows; i++) {
for (j = 2; j < cols; j++) {
newImage[i][j] = 0.25f * (image[i-1][j] \
+ image[i+1][j] \
+ image[i][j-1] \
+ image[i][j+1] \
- edge[i][j]);
}
}
}
calImage()函数正在进行光晕交换操作时不依赖的计算。
// some string with variable spaces and variable number of title words
var words = '1 26.05.16 THE REINFORCEMENT REVISED MM SB AE GM';
// match for:
// possible spaces at the start
// a 1
// variable spaces
// a xx.xx.xx date
// variable spaces
// any number of words that are not the initials, separated by variable spaces
// variable spaces
// four initials, separated by variable spaces
// possible spaces at the end
var matches = words.match(/^\s*1\s+\d\d\.\d\d\.\d\d\s+((?:\w+\s+)+\w+)\s+([A-Z]{2})\s+([A-Z]{2})\s+([A-Z]{2})\s+([A-Z]{2})\s*$/);
console.log(matches);
// replace variable spaces in title with single spaces
console.log(matches[1]);
matches[1] = matches[1].replace(/\s+/g, ' ');
console.log(matches[1]);