Skip to content

Commit c2cd940

Browse files
authored
Merge pull request #689 from sanpeqf/feat-mpi
Feat mpi
2 parents a25d634 + e57d7ee commit c2cd940

File tree

4 files changed

+84
-60
lines changed

4 files changed

+84
-60
lines changed

examples/mpi/bbp.c

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,64 +28,72 @@ factor2[] = {
2828
int
2929
main(int argc, const char *argv[])
3030
{
31-
bfdev_mpi_t vq, vv[4];
31+
bfdev_mpi_t *vv[4];
3232
unsigned int k, i, v;
3333
int retval;
3434

35-
bfdev_mpi_init(&vq, NULL);
36-
bfdev_mpi_init(&vv[0], NULL);
37-
bfdev_mpi_init(&vv[1], NULL);
38-
bfdev_mpi_init(&vv[2], NULL);
39-
bfdev_mpi_init(&vv[3], NULL);
35+
BFDEV_CLASS(bfdev_mpi, vq)(NULL);
36+
BFDEV_CLASS(bfdev_mpi, vv1)(NULL);
37+
BFDEV_CLASS(bfdev_mpi, vv2)(NULL);
38+
BFDEV_CLASS(bfdev_mpi, vv3)(NULL);
39+
BFDEV_CLASS(bfdev_mpi, vv4)(NULL);
40+
41+
if (!vq || !vv1 || !vv2 || !vv3 || !vv4)
42+
return 1;
43+
44+
vv[0] = vv1;
45+
vv[1] = vv2;
46+
vv[2] = vv3;
47+
vv[3] = vv4;
4048

4149
bfdev_log_info("Convergence BBP %d:\n", TEST_LEN);
4250
EXAMPLE_TIME_STATISTICAL(
4351
for (i = 0; i < 4; ++i) {
44-
retval = bfdev_mpi_seti(&vv[i], 0);
52+
retval = bfdev_mpi_seti(vv[i], 0);
4553
if (retval)
4654
return retval;
4755

4856
v = factor1[i] + (TEST_LEN << 2);
49-
retval = bfdev_mpi_bseti(&vv[i], v);
57+
retval = bfdev_mpi_bseti(vv[i], v);
5058
if (retval)
5159
return retval;
5260

5361
v = factor2[i];
54-
retval = bfdev_mpi_divi(&vv[i], &vv[i], &vv[i], v);
62+
retval = bfdev_mpi_divi(vv[i], vv[i], vv[i], v);
5563
if (retval)
5664
return retval;
5765

5866
if (i)
59-
retval = bfdev_mpi_sub(&vq, &vq, &vv[i]);
67+
retval = bfdev_mpi_sub(vq, vq, vv[i]);
6068
else
61-
retval = bfdev_mpi_add(&vq, &vq, vv);
69+
retval = bfdev_mpi_add(vq, vq, vv[0]);
6270

6371
if (retval)
6472
return retval;
6573
}
6674

6775
for (k = 1; k < TEST_LEN; ++k) {
6876
for (i = 0; i < 4; ++i) {
69-
retval = bfdev_mpi_seti(&vv[i], 0);
77+
retval = bfdev_mpi_seti(vv[i], 0);
7078
if (retval)
7179
return retval;
7280

7381
v = factor1[i] + ((TEST_LEN - k) << 2);
74-
retval = bfdev_mpi_bseti(&vv[i], v);
82+
retval = bfdev_mpi_bseti(vv[i], v);
7583
if (retval)
7684
return retval;
7785

7886
v = factor2[i] | (k << 3);
79-
retval = bfdev_mpi_divi(&vv[i], &vv[i], &vv[i], v);
87+
retval = bfdev_mpi_divi(vv[i], vv[i], vv[i], v);
8088
if (retval)
8189
return retval;
8290

8391
if (i) {
84-
retval = bfdev_mpi_sub(&vq, &vq, &vv[i]);
92+
retval = bfdev_mpi_sub(vq, vq, vv[i]);
8593
if (retval)
8694
return retval;
8795
} else {
88-
retval = bfdev_mpi_add(&vq, &vq, vv);
96+
retval = bfdev_mpi_add(vq, vq, vv[0]);
8997
if (retval)
9098
return retval;
9199
}
@@ -97,7 +105,7 @@ main(int argc, const char *argv[])
97105
#if PRINT_RESULT
98106
char *result;
99107

100-
result = print_num(&vq, 16);
108+
result = print_num(vq, 16);
101109
if (!result)
102110
return 1;
103111

@@ -106,11 +114,5 @@ main(int argc, const char *argv[])
106114
free(result);
107115
#endif
108116

109-
bfdev_mpi_release(&vv[0]);
110-
bfdev_mpi_release(&vv[1]);
111-
bfdev_mpi_release(&vv[2]);
112-
bfdev_mpi_release(&vv[3]);
113-
bfdev_mpi_release(&vq);
114-
115117
return 0;
116118
}

examples/mpi/fibonacci.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,36 @@ main(int argc, const char *argv[])
1818
char *result;
1919
int retval;
2020

21-
BFDEV_DEFINE_MPI(va, NULL);
22-
BFDEV_DEFINE_MPI(vb, NULL);
23-
BFDEV_DEFINE_MPI(vc, NULL);
21+
BFDEV_CLASS(bfdev_mpi, va)(NULL);
22+
BFDEV_CLASS(bfdev_mpi, vb)(NULL);
23+
BFDEV_CLASS(bfdev_mpi, vc)(NULL);
2424

25-
if ((retval = bfdev_mpi_seti(&va, 1)) ||
26-
(retval = bfdev_mpi_seti(&vb, 0)) ||
27-
(retval = bfdev_mpi_seti(&vc, 0)))
25+
if (!va || !vb || !vc)
26+
return 1;
27+
28+
if ((retval = bfdev_mpi_seti(va, 1)) ||
29+
(retval = bfdev_mpi_seti(vb, 0)) ||
30+
(retval = bfdev_mpi_seti(vc, 0)))
2831
return retval;
2932

3033
EXAMPLE_TIME_STATISTICAL(
3134
for (count = 0; count < TEST_LOOP - 1; ++count) {
32-
if ((retval = bfdev_mpi_add(&vc, &va, &vb)) ||
33-
(retval = bfdev_mpi_set(&vb, &va)) ||
34-
(retval = bfdev_mpi_set(&va, &vc)))
35+
if ((retval = bfdev_mpi_add(vc, va, vb)) ||
36+
(retval = bfdev_mpi_set(vb, va)) ||
37+
(retval = bfdev_mpi_set(va, vc)))
3538
return retval;
3639
}
3740
0;
3841
);
3942

4043
#if PRINT_RESULT
41-
result = print_num(&va, 10);
44+
result = print_num(va, 10);
4245
if (!result)
4346
return 1;
4447

4548
puts(result);
4649
free(result);
4750
#endif
4851

49-
bfdev_mpi_release(&va);
50-
bfdev_mpi_release(&vb);
51-
bfdev_mpi_release(&vc);
52-
5352
return 0;
5453
}

examples/mpi/machin.c

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,16 @@
2020
int
2121
main(int argc, const char *argv[])
2222
{
23-
bfdev_mpi_t vw, vs, vv, vq;
2423
unsigned int k;
2524
int retval;
2625

27-
bfdev_mpi_init(&vw, NULL);
28-
bfdev_mpi_init(&vs, NULL);
29-
bfdev_mpi_init(&vv, NULL);
30-
bfdev_mpi_init(&vq, NULL);
26+
BFDEV_CLASS(bfdev_mpi, vw)(NULL);
27+
BFDEV_CLASS(bfdev_mpi, vs)(NULL);
28+
BFDEV_CLASS(bfdev_mpi, vv)(NULL);
29+
BFDEV_CLASS(bfdev_mpi, vq)(NULL);
30+
31+
if (!vw || !vs || !vv || !vq)
32+
return 1;
3133

3234
/**
3335
* Machin-like formula:
@@ -38,30 +40,30 @@ main(int argc, const char *argv[])
3840
* arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 + ...
3941
*/
4042

41-
if ((retval = bfdev_mpi_seti(&vw, 16 * 5)) ||
42-
(retval = bfdev_mpi_seti(&vv, 4 * 239)) ||
43-
(retval = bfdev_mpi_seti(&vq, 10000)))
43+
if ((retval = bfdev_mpi_seti(vw, 16 * 5)) ||
44+
(retval = bfdev_mpi_seti(vv, 4 * 239)) ||
45+
(retval = bfdev_mpi_seti(vq, 10000)))
4446
return retval;
4547

4648
for (k = 0; k < TEST_SIZE; ++k) {
47-
if ((retval = bfdev_mpi_mul(&vw, &vw, &vq)) ||
48-
(retval = bfdev_mpi_mul(&vv, &vv, &vq)))
49+
if ((retval = bfdev_mpi_mul(vw, vw, vq)) ||
50+
(retval = bfdev_mpi_mul(vv, vv, vq)))
4951
return retval;
5052
}
5153

5254
bfdev_log_info("Convergence Machin %d:\n", TEST_LEN);
5355
EXAMPLE_TIME_STATISTICAL(
5456
for (k = 1; k <= TEST_LOOP; ++k) {
55-
if ((retval = bfdev_mpi_divi(&vw, &vw, &vw, 5 * 5)) ||
56-
(retval = bfdev_mpi_divi(&vv, &vv, &vv, 239 * 239)) ||
57-
(retval = bfdev_mpi_sub(&vq, &vw, &vv)) ||
58-
(retval = bfdev_mpi_divi(&vq, &vq, &vq, 2 * k - 1)))
57+
if ((retval = bfdev_mpi_divi(vw, vw, vw, 5 * 5)) ||
58+
(retval = bfdev_mpi_divi(vv, vv, vv, 239 * 239)) ||
59+
(retval = bfdev_mpi_sub(vq, vw, vv)) ||
60+
(retval = bfdev_mpi_divi(vq, vq, vq, 2 * k - 1)))
5961
return retval;
6062

6163
if (k & 1)
62-
retval = bfdev_mpi_add(&vs, &vs, &vq);
64+
retval = bfdev_mpi_add(vs, vs, vq);
6365
else
64-
retval = bfdev_mpi_sub(&vs, &vs, &vq);
66+
retval = bfdev_mpi_sub(vs, vs, vq);
6567

6668
if (retval)
6769
return retval;
@@ -72,7 +74,7 @@ main(int argc, const char *argv[])
7274
#if PRINT_RESULT
7375
char *result;
7476

75-
result = print_num(&vs, 10);
77+
result = print_num(vs, 10);
7678
if (!result)
7779
return 1;
7880

@@ -81,10 +83,5 @@ main(int argc, const char *argv[])
8183
free(result);
8284
#endif
8385

84-
bfdev_mpi_release(&vw);
85-
bfdev_mpi_release(&vs);
86-
bfdev_mpi_release(&vv);
87-
bfdev_mpi_release(&vq);
88-
8986
return 0;
9087
}

include/bfdev/mpi.h

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ struct bfdev_mpi {
3939
bfdev_mpi_t name = BFDEV_MPI_INIT(alloc)
4040

4141
static inline void
42-
bfdev_mpi_init(bfdev_mpi_t *mpi, bfdev_alloc_t *alloc)
42+
bfdev_mpi_init(bfdev_mpi_t *mpi, const bfdev_alloc_t *alloc)
4343
{
4444
*mpi = BFDEV_MPI_INIT(alloc);
4545
}
@@ -147,6 +147,32 @@ bfdev_mpi_data(const bfdev_mpi_t *var, bfdev_bool *sign);
147147
extern void
148148
bfdev_mpi_release(bfdev_mpi_t *var);
149149

150+
static inline bfdev_mpi_t *
151+
bfdev_mpi_create(const bfdev_alloc_t *alloc)
152+
{
153+
bfdev_mpi_t *var;
154+
155+
var = bfdev_malloc(alloc, sizeof(*var));
156+
if (bfdev_unlikely(!var))
157+
return BFDEV_NULL;
158+
bfdev_mpi_init(var, alloc);
159+
160+
return var;
161+
}
162+
163+
static inline void
164+
bfdev_mpi_destroy(bfdev_mpi_t *var)
165+
{
166+
bfdev_mpi_release(var);
167+
bfdev_free(var->alloc, var);
168+
}
169+
170+
BFDEV_DEFINE_CLASS(bfdev_mpi, bfdev_mpi_t *,
171+
bfdev_mpi_create(alloc),
172+
bfdev_mpi_destroy(_T),
173+
const bfdev_alloc_t *alloc
174+
)
175+
150176
BFDEV_END_DECLS
151177

152178
#endif /* _BFDEV_MPI_H_ */

0 commit comments

Comments
 (0)