test16.c
来自「shpf 1.9一个并行编译器」· C语言 代码 · 共 208 行
C
208 行
// !hpf$ processors p(3, 2)
//
// !hpf$ template t(30, 30)
// !hpf$ distribute t(block, cyclic(10)) onto p
//
// integer a(6, 6)
// !hpf$ align a(i, j) with t(3 + 3 * i, 5 * j)
//
// integer b(6)
// !hpf$ align b(j) with t(j, *)
//
// integer s(6)
// !hpf$ align s(j) with t(3, 23 + j)
//
// integer i, j
//
// do i = 1, 6
// do j = 1, 6
// a(i, j) = 10 * i + j
// enddo
// enddo
//
// print *, 'a...'
// do i = 1, 6
// print "(10i4)", a(i, : )
// enddo
//
// a = eoshift(a, 2, -1, 1)
//
// print *, 'eoshift...'
//
// do i = 1, 6
// print "(10i4)", a(i, : )
// enddo
//
// do j = 1, 6
// b(j) = -j
// enddo
//
// a = eoshift(a, -2, b, 1)
//
// print *, 'eoshift...'
//
// do i = 1, 6
// print "(10i4)", a(i, : )
// enddo
//
// do j = 1, 6
// s(j) = 2 - (j - 1) / 2
// enddo
//
// a = eoshift(a, s, -1, 2)
//
// print *, 'eoshift...'
//
// do i = 1, 6
// print "(10i4)", a(i, : )
// enddo
//
// a = eoshift(a, -s, b, 2)
//
// print *, 'eoshift...'
//
// do i = 1, 6
// print "(10i4)", a(i, : )
// enddo
//
//end
#include <stdio.h>
#include "ad++.h"
#include "admacros.h"
void main(int argc, char* argv[]) {
AdlibInit(argc, argv) ;
Procs2 p(3, 2) ;
Range t1(30, p.dim(0), BLK) ;
Range t2(30, p.dim(1), CYC, 10) ;
Range a1 = t1.subrng(6, 5, 3) ;
Range a2 = t2.subrng(6, 4, 5) ;
Array2<int> a(p, a1, a2) ;
Range b1 = t1.subrng(6, 0) ;
Array1<int> b(p, b1) ;
Range s1 = t2.subrng(6, 23) ;
Array1<int> s(p / t1(2), s1) ;
Array2<int> tmp1(p, a1, a2) ;
Array1<int> tmp2(p, a2) ;
Array1<int> tmp3(p, a1) ;
Array1<int> tmp4(p, a1) ;
// do i = 1, 6
// do j = 1, 6
// a(i, j) = 10 * i + j
// enddo
// enddo
on(p) {
where(a1) {
where(a2) {
a(a1, a2) = 10 * (a1 + 1) + a2 + 1 ;
} erewh(a2) ;
} erewh(a1) ;
} no(p) ;
gprintf("a...\n") ;
aprintf("%4d%*N", a, a2.size()) ;
// a = eoshift(a, 2, -1, 1)
on(p) {
where(a1) {
where(a2) {
tmp1(a1, a2) = -1 ;
} erewh(a2) ;
} erewh(a1) ;
} no(p) ;
shift(tmp1, a, 2, 0, EDGE) ;
copy(a, tmp1) ;
gprintf("eoshift...\n") ;
aprintf("%4d%*N", a, a2.size()) ;
// do j = 1, 6
// b(j) = -j
// enddo
on(p) {
where(b1) {
b(b1) = -(b1 + 1) ;
} erewh(b1) ;
} no(p) ;
// a = eoshift(a, -2, b, 1)
remap(tmp2, b) ;
on(p) {
where(a1) {
where(a2) {
tmp1(a1, a2) = tmp2(a2) ;
} erewh(a2) ;
} erewh(a1) ;
} no(p) ;
shift(tmp1, a, -2, 0, EDGE) ;
copy(a, tmp1) ;
gprintf("eoshift...\n") ;
aprintf("%4d%*N", a, a2.size()) ;
// do j = 1, 6
// s(j) = 2 - (j - 1) / 2
// enddo
Group q = s.grp() ;
on(q) {
where(s1) {
s(s1) = 2 - s1 / 2 ;
} erewh(s1) ;
} no(q) ;
// a = eoshift(a, s, -1, 2)
remap(tmp3, s) ;
on(p) {
where(a1) {
where(a2) {
tmp1(a1, a2) = -1 ;
} erewh(a2) ;
} erewh(a1) ;
} no(p) ;
skew(tmp1, a, tmp3, 1, EDGE) ;
copy(a, tmp1) ;
gprintf("eoshift...\n") ;
aprintf("%4d%*N", a, a2.size()) ;
// a = eoshift(a, -s, b, 2)
remap(tmp4, b) ;
on(p) {
where(a1) {
tmp3(a1) = -tmp3(a1) ;
where(a2) {
tmp1(a1, a2) = tmp4(a1) ;
} erewh(a2) ;
} erewh(a1) ;
} no(p) ;
skew(tmp1, a, tmp3, 1, EDGE) ;
copy(a, tmp1) ;
gprintf("eoshift...\n") ;
aprintf("%4d%*N", a, a2.size()) ;
AdlibFinalize() ;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?