📄 test7.c
字号:
// !hpf$ processors p(3, 2)
//
// !hpf$ template t(24, 8)
// !hpf$ distribute t(block, cyclic) onto p
//
// integer a(8, 4, 10)
//
// !hpf$ align a(i, *, k) with t(4 + 2 * k, i)
//
// !hpf$ processors q(2, 3)
//
// !hpf$ template s(10, 4)
// !hpf$ distribute s(block, block) onto q
//
// integer b(6, 4, 12)
// !hpf$ align b(i, j, *) with s(8 - i, j)
//
// integer u(6), v(12)
// !hpf$ align u(i) with b(i, *, *)
//
// integer i, j, k
//
// do i = 1, 8
// do j = 1, 4
// do k = 1, 10
// a(i, j, k) = 100 * (i - 1) + 10 * (j - 1) + (k - 1)
// enddo
// enddo
// enddo
//
// do i = 1, 6
// u(i) = 1 + mod((i - 1) * 5, 8)
// enddo
//
// do k = 1, 12
// v(k) = 1 + (k - 1) / 2 + 1
// enddo
//
// b = a(u, :, v)
//
// do i = 1, 6
// do j = 1, 4
// do k = 1, 12
// print "(i3, i3, i3, i10)", i - 1, j - 1, k - 1, b(i, j, k)
// enddo
// enddo
// enddo
//
// end
#include <iostream.h>
#include <stdio.h>
#include "ad++.h"
#include "admacros.h"
void main(int argc, char* argv[]) {
AdlibInit(argc, argv) ;
Procs2 p(3, 2) ;
Range x(8, p.dim(1), CYC) ;
Range y(4) ;
Range z = Range(24, p.dim(0), BLK).subrng(10, 5, 2) ;
Array3<int> a(p, x, y, z) ;
Procs2 q(2, 3) ;
Range rr(10, q.dim(0), BLK) ;
Range r = Range(10, q.dim(0), BLK).subrng(6, 6, -1) ;
Range s(4, q.dim(1), BLK) ;
Range t(12) ;
Array3<int> b(q, r, s, t) ;
Array1<int> u(q, r) ;
Array1<int> v(q, t) ;
on(p) {
where(x) {
where(y) {
where(z) {
a(x, y, z) = 100 * x + 10 * y + z ;
} erewh(z) ;
} erewh(y) ;
} erewh(x) ;
} no(p) ;
on(q) {
where(r) {
u(r) = (r * 5) % 8 ;
} erewh(r) ;
where(t) {
v(t) = t / 2 + 1 ;
} erewh(t) ;
} no(q) ;
vecGather(b, a, u, Array1<int>(), v) ;
aprintf("%3R0%3R1%3R2%10d\n", b) ;
AdlibFinalize() ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -