diff --git a/benchmarks/dgemm_noprefetch.c b/benchmarks/dgemm_noprefetch.c index 7bdc354a7bed0c972f9b1ee7be2229ff1a972974..e326055ce74fcdad9d36a750fb1afada47e734f7 100644 --- a/benchmarks/dgemm_noprefetch.c +++ b/benchmarks/dgemm_noprefetch.c @@ -21,8 +21,8 @@ #include #include -AML_TILING_2D_ROWMAJOR_DECL(tiling_row); -AML_TILING_2D_COLMAJOR_DECL(tiling_col); +struct aml_tiling *tiling_row; +struct aml_tiling *tiling_col; struct aml_area *slow, *fast; size_t memsize, tilesize, N, T; double *a, *b, *c; @@ -34,7 +34,7 @@ void do_work() ldb = lda; ldc = lda; size_t ndims[2]; - aml_tiling_ndims(&tiling_row, &ndims[0], &ndims[1]); + aml_tiling_ndims(tiling_row, &ndims[0], &ndims[1]); for(int k = 0; k < ndims[1]; k++) { @@ -45,12 +45,12 @@ void do_work() { size_t aoff, boff, coff; double *ap, *bp, *cp; - aoff = aml_tiling_tileid(&tiling_col, i, k); - boff = aml_tiling_tileid(&tiling_row, k, j); - coff = aml_tiling_tileid(&tiling_row, i, j); - ap = aml_tiling_tilestart(&tiling_col, a, aoff); - bp = aml_tiling_tilestart(&tiling_row, b, boff); - cp = aml_tiling_tilestart(&tiling_row, c, coff); + aoff = aml_tiling_tileid(tiling_col, i, k); + boff = aml_tiling_tileid(tiling_row, k, j); + coff = aml_tiling_tileid(tiling_row, i, j); + ap = aml_tiling_tilestart(tiling_col, a, aoff); + bp = aml_tiling_tilestart(tiling_row, b, boff); + cp = aml_tiling_tilestart(tiling_row, c, coff); cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, ldc, lda, ldb, 1.0, ap, lda, bp, ldb, 1.0, cp, ldc); } } @@ -72,10 +72,10 @@ int main(int argc, char* argv[]) tilesize = sizeof(double)*T*T; /* the initial tiling, of 2D square tiles */ - assert(!aml_tiling_2d_init(&tiling_row, AML_TILING_TYPE_2D_ROWMAJOR, - tilesize, memsize, N/T , N/T)); - assert(!aml_tiling_2d_init(&tiling_col, AML_TILING_TYPE_2D_COLMAJOR, - tilesize, memsize, N/T , N/T)); + assert(!aml_tiling_2d_create(&tiling_row, AML_TILING_TYPE_2D_ROWMAJOR, + tilesize, memsize, N/T , N/T)); + assert(!aml_tiling_2d_create(&tiling_col, AML_TILING_TYPE_2D_COLMAJOR, + tilesize, memsize, N/T , N/T)); aml_area_linux_create(&slow, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &slowb, AML_AREA_LINUX_BINDING_FLAG_BIND); @@ -156,8 +156,8 @@ int main(int argc, char* argv[]) aml_area_munmap(fast, c, memsize); aml_area_linux_destroy(&slow); aml_area_linux_destroy(&fast); - aml_tiling_2d_fini(&tiling_row); - aml_tiling_2d_fini(&tiling_col); + aml_tiling_2d_destroy(&tiling_row); + aml_tiling_2d_destroy(&tiling_col); aml_finalize(); return 0; } diff --git a/benchmarks/dgemm_prefetch.c b/benchmarks/dgemm_prefetch.c index 8662ecf8aed2a0ec505625688ec1f739281ee4f0..da80d8833cefe7c1a53cc00ca9d1de2bf4433589 100644 --- a/benchmarks/dgemm_prefetch.c +++ b/benchmarks/dgemm_prefetch.c @@ -24,11 +24,11 @@ #include #include -AML_TILING_2D_ROWMAJOR_DECL(tiling_row); -AML_TILING_2D_COLMAJOR_DECL(tiling_col); -AML_TILING_1D_DECL(tiling_prefetch); -AML_SCRATCH_PAR_DECL(sa); -AML_SCRATCH_PAR_DECL(sb); +struct aml_tiling *tiling_row; +struct aml_tiling *tiling_col; +struct aml_tiling *tiling_prefetch; +struct aml_scratch *sa; +struct aml_scratch *sb; struct aml_area *slow, *fast; size_t memsize, tilesize, N, T; @@ -45,19 +45,19 @@ void do_work() int ai, bi, oldai, oldbi; void *abaseptr, *bbaseptr; struct aml_scratch_request *ar, *br; - aml_tiling_ndims(&tiling_row, &ndims[0], &ndims[1]); - abaseptr = aml_scratch_baseptr(&sa); - bbaseptr = aml_scratch_baseptr(&sb); - prea = aml_tiling_tilestart(&tiling_prefetch, a, 0); - preb = aml_tiling_tilestart(&tiling_prefetch, b, 0); + aml_tiling_ndims(tiling_row, &ndims[0], &ndims[1]); + abaseptr = aml_scratch_baseptr(sa); + bbaseptr = aml_scratch_baseptr(sb); + prea = aml_tiling_tilestart(tiling_prefetch, a, 0); + preb = aml_tiling_tilestart(tiling_prefetch, b, 0); ai = -1; bi = -1; for(int k = 0; k < ndims[1]; k++) { oldbi = bi; oldai = ai; - aml_scratch_async_pull(&sa, &ar, abaseptr, &ai, a, k + 1); - aml_scratch_async_pull(&sb, &br, bbaseptr, &bi, b, k + 1); + aml_scratch_async_pull(sa, &ar, abaseptr, &ai, a, k + 1); + aml_scratch_async_pull(sb, &br, bbaseptr, &bi, b, k + 1); #pragma omp parallel for for(int i = 0; i < ndims[0]; i++) { @@ -65,25 +65,25 @@ void do_work() { size_t coff; double *ap, *bp, *cp; - ap = aml_tiling_tilestart(&tiling_row, prea, i); - bp = aml_tiling_tilestart(&tiling_row, preb, j); - coff = aml_tiling_tileid(&tiling_row, i, j); - cp = aml_tiling_tilestart(&tiling_row, c, coff); + ap = aml_tiling_tilestart(tiling_row, prea, i); + bp = aml_tiling_tilestart(tiling_row, preb, j); + coff = aml_tiling_tileid(tiling_row, i, j); + cp = aml_tiling_tilestart(tiling_row, c, coff); cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, ldc, lda, ldb, 1.0, ap, lda, bp, ldb, 1.0, cp, ldc); } } - aml_scratch_wait(&sa, ar); - aml_scratch_wait(&sb, br); - prea = aml_tiling_tilestart(&tiling_prefetch, abaseptr, ai); - preb = aml_tiling_tilestart(&tiling_prefetch, bbaseptr, bi); - aml_scratch_release(&sa, oldai); - aml_scratch_release(&sb, oldbi); + aml_scratch_wait(sa, ar); + aml_scratch_wait(sb, br); + prea = aml_tiling_tilestart(tiling_prefetch, abaseptr, ai); + preb = aml_tiling_tilestart(tiling_prefetch, bbaseptr, bi); + aml_scratch_release(sa, oldai); + aml_scratch_release(sb, oldbi); } } int main(int argc, char* argv[]) { - AML_DMA_LINUX_SEQ_DECL(dma); + struct aml_dma *dma; struct aml_bitmap slowb, fastb; aml_init(&argc, &argv); assert(argc == 5); @@ -97,13 +97,13 @@ int main(int argc, char* argv[]) tilesize = sizeof(double)*T*T; /* the initial tiling, 2d grid of tiles */ - assert(!aml_tiling_2d_init(&tiling_row, AML_TILING_TYPE_2D_ROWMAJOR, - tilesize, memsize, N/T , N/T)); - assert(!aml_tiling_2d_init(&tiling_col, AML_TILING_TYPE_2D_COLMAJOR, - tilesize, memsize, N/T , N/T)); + assert(!aml_tiling_2d_create(&tiling_row, AML_TILING_TYPE_2D_ROWMAJOR, + tilesize, memsize, N/T , N/T)); + assert(!aml_tiling_2d_create(&tiling_col, AML_TILING_TYPE_2D_COLMAJOR, + tilesize, memsize, N/T , N/T)); /* the prefetch tiling, 1D sequence of columns of tiles */ - assert(!aml_tiling_1d_init(&tiling_prefetch, - tilesize*(N/T), memsize)); + assert(!aml_tiling_1d_create(&tiling_prefetch, + tilesize*(N/T), memsize)); aml_area_linux_create(&slow, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &slowb, AML_AREA_LINUX_BINDING_FLAG_BIND); @@ -112,9 +112,9 @@ int main(int argc, char* argv[]) &fastb, AML_AREA_LINUX_BINDING_FLAG_BIND); assert(fast != NULL); - assert(!aml_dma_linux_seq_init(&dma, 2)); - assert(!aml_scratch_par_init(&sa, &fast, &slow, &dma, &tiling_prefetch, (size_t)2, (size_t)2)); - assert(!aml_scratch_par_init(&sb, &fast, &slow, &dma, &tiling_prefetch, (size_t)2, (size_t)2)); + assert(!aml_dma_linux_seq_create(&dma, 2)); + assert(!aml_scratch_par_create(&sa, fast, slow, dma, tiling_prefetch, (size_t)2, (size_t)2)); + assert(!aml_scratch_par_create(&sb, fast, slow, dma, tiling_prefetch, (size_t)2, (size_t)2)); /* allocation */ a = aml_area_mmap(slow, NULL, memsize); b = aml_area_mmap(slow, NULL, memsize); @@ -182,17 +182,17 @@ int main(int argc, char* argv[]) /* print the flops in GFLOPS */ printf("dgemm-prefetch: %llu %lld %lld %f\n", N, memsize, time, flops/1e9); - aml_scratch_par_fini(&sa); - aml_scratch_par_fini(&sb); - aml_dma_linux_seq_fini(&dma); + aml_scratch_par_destroy(&sa); + aml_scratch_par_destroy(&sb); + aml_dma_linux_seq_destroy(&dma); aml_area_munmap(slow, a, memsize); aml_area_munmap(slow, b, memsize); aml_area_munmap(fast, c, memsize); aml_area_linux_destroy(&slow); aml_area_linux_destroy(&fast); - aml_tiling_2d_fini(&tiling_row); - aml_tiling_2d_fini(&tiling_col); - aml_tiling_1d_fini(&tiling_prefetch); + aml_tiling_2d_destroy(&tiling_row); + aml_tiling_2d_destroy(&tiling_col); + aml_tiling_1d_destroy(&tiling_prefetch); aml_finalize(); return 0; } diff --git a/benchmarks/stream_add_omp.c b/benchmarks/stream_add_omp.c index 484489bf444a384f63158c597d0d5985da5c7d6f..eba274e79671af011c04bf8495c04be0e005f345 100644 --- a/benchmarks/stream_add_omp.c +++ b/benchmarks/stream_add_omp.c @@ -38,8 +38,8 @@ int main(int argc, char *argv[]) */ struct aml_area *slow = &aml_area_linux, *fast = aml_area_linux; - struct aml_dma dma; - assert(!aml_dma_init(&dma, 0)); + struct aml_dma *dma; + assert(!aml_dma_create(&dma, 0)); void *a, *b, *c; @@ -75,19 +75,19 @@ int main(int argc, char *argv[]) { for(unsigned long i = 0; i < numthreads*CHUNKING; i++) { #pragma omp task depend(inout: wa[i*esz:esz]) - assert(!aml_dma_move(&dma, &fast, &slow, &wa[i*esz], esz)); + assert(!aml_dma_move(dma, &fast, &slow, &wa[i*esz], esz)); #pragma omp task depend(inout: wb[i*esz:esz]) - assert(!aml_dma_move(&dma, &fast, &slow, &wb[i*esz], esz)); + assert(!aml_dma_move(dma, &fast, &slow, &wb[i*esz], esz)); #pragma omp task depend(inout: wc[i*esz:esz]) - assert(!aml_dma_move(&dma, &fast, &slow, &wc[i*esz], esz)); + assert(!aml_dma_move(dma, &fast, &slow, &wc[i*esz], esz)); #pragma omp task depend(in: wa[i*esz:esz], wb[i*esz:esz]) depend(out: wc[i*esz:esz]) kernel(&wa[i*esz], &wb[i*esz], &wc[i*esz], esz); #pragma omp task depend(inout: wa[i*esz:esz]) - assert(!aml_dma_move(&dma, &slow, &fast, &wa[i*esz], esz)); + assert(!aml_dma_move(dma, &slow, &fast, &wa[i*esz], esz)); #pragma omp task depend(inout: wb[i*esz:esz]) - assert(!aml_dma_move(&dma, &slow, &fast, &wb[i*esz], esz)); + assert(!aml_dma_move(dma, &slow, &fast, &wb[i*esz], esz)); #pragma omp task depend(inout: wc[i*esz:esz]) - assert(!aml_dma_move(&dma, &slow, &fast, &wc[i*esz], esz)); + assert(!aml_dma_move(dma, &slow, &fast, &wc[i*esz], esz)); } } diff --git a/benchmarks/stream_add_omp_mt.c b/benchmarks/stream_add_omp_mt.c index a171667f8b307eb9b0f7c87c64cd018f170f6f21..6297732e30cad4ccb286f11f3063bfeed56e048a 100644 --- a/benchmarks/stream_add_omp_mt.c +++ b/benchmarks/stream_add_omp_mt.c @@ -27,10 +27,10 @@ size_t numthreads, tilesz, esz; unsigned long *a, *b, *c; -AML_TILING_1D_DECL(tiling); +struct aml_tiling *tiling; struct aml_area *slow, *fast; -AML_SCRATCH_SEQ_DECL(sa); -AML_SCRATCH_SEQ_DECL(sb); +struct aml_scratch *sa; +struct aml_scratch *sb; int kernel(unsigned long *a, unsigned long *b, unsigned long *c, size_t n) { @@ -42,7 +42,7 @@ int kernel(unsigned long *a, unsigned long *b, unsigned long *c, size_t n) int main(int argc, char *argv[]) { - AML_DMA_LINUX_PAR_DECL(dma); + struct aml_dma *dma; struct aml_bitmap slowb, fastb; aml_init(&argc, &argv); assert(argc == 4); @@ -63,17 +63,17 @@ int main(int argc, char *argv[]) } /* initialize all the supporting struct */ - assert(!aml_tiling_1d_init(&tiling, tilesz, memsize)); + assert(!aml_tiling_1d_create(&tiling, tilesz, memsize)); aml_area_linux_create(&slow, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &slowb, AML_AREA_LINUX_BINDING_FLAG_BIND); assert(slow != NULL); aml_area_linux_create(&fast, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &fastb, AML_AREA_LINUX_BINDING_FLAG_BIND); assert(fast != NULL); - assert(!aml_dma_linux_par_init(&dma, numthreads*2, numthreads)); - assert(!aml_scratch_seq_init(&sa, &fast, &slow, &dma, &tiling, + assert(!aml_dma_linux_par_create(&dma, numthreads*2, numthreads)); + assert(!aml_scratch_seq_create(&sa, fast, slow, dma, tiling, (size_t)2*numthreads, (size_t)1)); - assert(!aml_scratch_seq_init(&sb, &fast, &slow, &dma, &tiling, + assert(!aml_scratch_seq_create(&sb, fast, slow, dma, tiling, (size_t)2*numthreads, (size_t)1)); /* allocation */ @@ -93,23 +93,23 @@ int main(int argc, char *argv[]) int i, ai, bi, oldai, oldbi; unsigned long *ap, *bp; void *abaseptr, *bbaseptr; - ap = aml_tiling_tilestart(&tiling, a, 0); - bp = aml_tiling_tilestart(&tiling, b, 0); - abaseptr = aml_scratch_baseptr(&sa); - bbaseptr = aml_scratch_baseptr(&sb); + ap = aml_tiling_tilestart(tiling, a, 0); + bp = aml_tiling_tilestart(tiling, b, 0); + abaseptr = aml_scratch_baseptr(sa); + bbaseptr = aml_scratch_baseptr(sb); ai = -1; bi = -1; for(i = 0; i < (memsize/tilesz) -1; i++) { struct aml_scratch_request *ar, *br; oldai = ai; oldbi = bi; - aml_scratch_async_pull(&sa, &ar, abaseptr, &ai, a, i+1); - aml_scratch_async_pull(&sb, &br, bbaseptr, &bi, b, i+1); + aml_scratch_async_pull(sa, &ar, abaseptr, &ai, a, i+1); + aml_scratch_async_pull(sb, &br, bbaseptr, &bi, b, i+1); kernel(ap, bp, &c[i*esz], esz); - aml_scratch_wait(&sa, ar); - aml_scratch_wait(&sb, br); - ap = aml_tiling_tilestart(&tiling, abaseptr, ai); - bp = aml_tiling_tilestart(&tiling, bbaseptr, bi); - aml_scratch_release(&sa, oldai); - aml_scratch_release(&sb, oldbi); + aml_scratch_wait(sa, ar); + aml_scratch_wait(sb, br); + ap = aml_tiling_tilestart(tiling, abaseptr, ai); + bp = aml_tiling_tilestart(tiling, bbaseptr, bi); + aml_scratch_release(sa, oldai); + aml_scratch_release(sb, oldbi); } kernel(ap, bp, &c[i*esz], esz); @@ -118,15 +118,15 @@ int main(int argc, char *argv[]) assert(c[i] == esize); } - aml_scratch_seq_fini(&sa); - aml_scratch_seq_fini(&sb); - aml_dma_linux_par_fini(&dma); + aml_scratch_seq_destroy(&sa); + aml_scratch_seq_destroy(&sb); + aml_dma_linux_par_destroy(&dma); aml_area_munmap(slow, a, memsize); aml_area_munmap(slow, b, memsize); aml_area_munmap(fast, c, memsize); aml_area_linux_destroy(&slow); aml_area_linux_destroy(&fast); - aml_tiling_1d_fini(&tiling); + aml_tiling_1d_destroy(&tiling); aml_finalize(); return 0; } diff --git a/benchmarks/stream_add_omp_st.c b/benchmarks/stream_add_omp_st.c index 83a978e03b57ad51192fe7447cfd8c9393ac656b..f4e470c65c240b2e52d33e2025e59490dc43428f 100644 --- a/benchmarks/stream_add_omp_st.c +++ b/benchmarks/stream_add_omp_st.c @@ -26,10 +26,10 @@ size_t numthreads, tilesz, esz; unsigned long *a, *b, *c; -AML_TILING_1D_DECL(tiling); +struct aml_tiling *tiling; struct aml_area *slow, *fast; -AML_SCRATCH_PAR_DECL(sa); -AML_SCRATCH_PAR_DECL(sb); +struct aml_scratch *sa; +struct aml_scratch *sb; int kernel(unsigned long *a, unsigned long *b, unsigned long *c, size_t n) { @@ -47,32 +47,32 @@ void do_work(unsigned long tid) unsigned long *ap, *bp, *cp; void *abaseptr, *bbaseptr; offset = tid*CHUNKING; - ap = aml_tiling_tilestart(&tiling, a, offset); - bp = aml_tiling_tilestart(&tiling, b, offset); - cp = aml_tiling_tilestart(&tiling, c, offset); - abaseptr = aml_scratch_baseptr(&sa); - bbaseptr = aml_scratch_baseptr(&sb); + ap = aml_tiling_tilestart(tiling, a, offset); + bp = aml_tiling_tilestart(tiling, b, offset); + cp = aml_tiling_tilestart(tiling, c, offset); + abaseptr = aml_scratch_baseptr(sa); + bbaseptr = aml_scratch_baseptr(sb); ai = -1; bi = -1; for(i = 0; i < CHUNKING-1; i++) { struct aml_scratch_request *ar, *br; oldai = ai; oldbi = bi; - aml_scratch_async_pull(&sa, &ar, abaseptr, &ai, a, offset+i+1); - aml_scratch_async_pull(&sb, &br, bbaseptr, &bi, b, offset+i+1); + aml_scratch_async_pull(sa, &ar, abaseptr, &ai, a, offset+i+1); + aml_scratch_async_pull(sb, &br, bbaseptr, &bi, b, offset+i+1); kernel(ap, bp, cp, esz); - aml_scratch_wait(&sa, ar); - aml_scratch_wait(&sb, br); - ap = aml_tiling_tilestart(&tiling, abaseptr, ai); - bp = aml_tiling_tilestart(&tiling, bbaseptr, bi); - cp = aml_tiling_tilestart(&tiling, c, offset+i+1); - aml_scratch_release(&sa, oldai); - aml_scratch_release(&sb, oldbi); + aml_scratch_wait(sa, ar); + aml_scratch_wait(sb, br); + ap = aml_tiling_tilestart(tiling, abaseptr, ai); + bp = aml_tiling_tilestart(tiling, bbaseptr, bi); + cp = aml_tiling_tilestart(tiling, c, offset+i+1); + aml_scratch_release(sa, oldai); + aml_scratch_release(sb, oldbi); } kernel(ap, bp, cp, esz); } int main(int argc, char *argv[]) { - AML_DMA_LINUX_SEQ_DECL(dma); + struct aml_dma *dma; struct aml_bitmap slowb, fastb; aml_init(&argc, &argv); assert(argc == 4); @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) } /* initialize all the supporting struct */ - assert(!aml_tiling_1d_init(&tiling, tilesz, memsize)); + assert(!aml_tiling_1d_create(&tiling, tilesz, memsize)); aml_area_linux_create(&slow, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &slowb, AML_AREA_LINUX_BINDING_FLAG_BIND); @@ -101,10 +101,10 @@ int main(int argc, char *argv[]) aml_area_linux_create(&fast, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &fastb, AML_AREA_LINUX_BINDING_FLAG_BIND); assert(fast != NULL); - assert(!aml_dma_linux_seq_init(&dma, numthreads*2)); - assert(!aml_scratch_par_init(&sa, &fast, &slow, &dma, &tiling, + assert(!aml_dma_linux_seq_create(&dma, numthreads*2)); + assert(!aml_scratch_par_create(&sa, fast, slow, dma, tiling, 2*numthreads, numthreads)); - assert(!aml_scratch_par_init(&sb, &fast, &slow, &dma, &tiling, + assert(!aml_scratch_par_create(&sb, fast, slow, dma, tiling, 2*numthreads, numthreads)); /* allocation */ @@ -131,15 +131,15 @@ int main(int argc, char *argv[]) assert(c[i] == esize); } - aml_scratch_par_fini(&sa); - aml_scratch_par_fini(&sb); - aml_dma_linux_seq_fini(&dma); + aml_scratch_par_destroy(&sa); + aml_scratch_par_destroy(&sb); + aml_dma_linux_seq_destroy(&dma); aml_area_munmap(slow, a, memsize); aml_area_munmap(slow, b, memsize); aml_area_munmap(fast, c, memsize); aml_area_linux_destroy(&slow); aml_area_linux_destroy(&fast); - aml_tiling_1d_fini(&tiling); + aml_tiling_1d_destroy(&tiling); aml_finalize(); return 0; } diff --git a/benchmarks/stream_add_pth_st.c b/benchmarks/stream_add_pth_st.c index de3aa27e9dd8048febde0814bb0d349ae2b4de46..8cb32698c0bbea3702caf211d374cbc61bf8f752 100644 --- a/benchmarks/stream_add_pth_st.c +++ b/benchmarks/stream_add_pth_st.c @@ -27,9 +27,9 @@ size_t numthreads, tilesz, esz; unsigned long *a, *b, *c; struct aml_area *slow, *fast; -AML_TILING_1D_DECL(tiling); -AML_SCRATCH_PAR_DECL(sa); -AML_SCRATCH_PAR_DECL(sb); +struct aml_tiling *tiling; +struct aml_scratch *sa; +struct aml_scratch *sb; int kernel(unsigned long *a, unsigned long *b, unsigned long *c, size_t n) { @@ -53,25 +53,25 @@ void *th_work(void *arg) void *abaseptr, *bbaseptr; struct winfo *wi = arg; offset = wi->tid*CHUNKING; - ap = aml_tiling_tilestart(&tiling, a, offset); - bp = aml_tiling_tilestart(&tiling, b, offset); - cp = aml_tiling_tilestart(&tiling, c, offset); - abaseptr = aml_scratch_baseptr(&sa); - bbaseptr = aml_scratch_baseptr(&sb); + ap = aml_tiling_tilestart(tiling, a, offset); + bp = aml_tiling_tilestart(tiling, b, offset); + cp = aml_tiling_tilestart(tiling, c, offset); + abaseptr = aml_scratch_baseptr(sa); + bbaseptr = aml_scratch_baseptr(sb); ai = -1; bi = -1; for(i = 0; i < CHUNKING-1; i++) { struct aml_scratch_request *ar, *br; oldai = ai; oldbi = bi; - aml_scratch_async_pull(&sa, &ar, abaseptr, &ai, a, offset+i+1); - aml_scratch_async_pull(&sb, &br, bbaseptr, &bi, b, offset+i+1); + aml_scratch_async_pull(sa, &ar, abaseptr, &ai, a, offset+i+1); + aml_scratch_async_pull(sb, &br, bbaseptr, &bi, b, offset+i+1); kernel(ap, bp, cp, esz); - aml_scratch_wait(&sa, ar); - aml_scratch_wait(&sb, br); - ap = aml_tiling_tilestart(&tiling, abaseptr, ai); - bp = aml_tiling_tilestart(&tiling, bbaseptr, bi); - cp = aml_tiling_tilestart(&tiling, c, offset+i+1); - aml_scratch_release(&sa, oldai); - aml_scratch_release(&sb, oldbi); + aml_scratch_wait(sa, ar); + aml_scratch_wait(sb, br); + ap = aml_tiling_tilestart(tiling, abaseptr, ai); + bp = aml_tiling_tilestart(tiling, bbaseptr, bi); + cp = aml_tiling_tilestart(tiling, c, offset+i+1); + aml_scratch_release(sa, oldai); + aml_scratch_release(sb, oldbi); } kernel(ap, bp, cp, esz); @@ -79,7 +79,7 @@ void *th_work(void *arg) } int main(int argc, char *argv[]) { - AML_DMA_LINUX_SEQ_DECL(dma); + struct aml_dma *dma; struct aml_bitmap slowb, fastb; aml_init(&argc, &argv); assert(argc == 4); @@ -100,17 +100,17 @@ int main(int argc, char *argv[]) } /* initialize all the supporting struct */ - assert(!aml_tiling_1d_init(&tiling, tilesz, memsize)); + assert(!aml_tiling_1d_create(&tiling, tilesz, memsize)); aml_area_linux_create(&slow, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &slowb, AML_AREA_LINUX_BINDING_FLAG_BIND); assert(slow != NULL); aml_area_linux_create(&fast, AML_AREA_LINUX_MMAP_FLAG_PRIVATE, &fastb, AML_AREA_LINUX_BINDING_FLAG_BIND); assert(fast != NULL); - assert(!aml_dma_linux_seq_init(&dma, (size_t)numthreads*4)); - assert(!aml_scratch_par_init(&sa, &fast, &slow, &dma, &tiling, + assert(!aml_dma_linux_seq_create(dma, (size_t)numthreads*4)); + assert(!aml_scratch_par_create(&sa, fast, slow, dma, tiling, (size_t)2*numthreads, (size_t)numthreads)); - assert(!aml_scratch_par_init(&sb, &fast, &slow, &dma, &tiling, + assert(!aml_scratch_par_create(&sb, fast, slow, dma, tiling, (size_t)2*numthreads, (size_t)numthreads)); /* allocation */ @@ -142,15 +142,15 @@ int main(int argc, char *argv[]) assert(c[i] == esize); } - aml_scratch_par_fini(&sa); - aml_scratch_par_fini(&sb); - aml_dma_linux_seq_fini(&dma); + aml_scratch_par_destroy(&sa); + aml_scratch_par_destroy(&sb); + aml_dma_linux_seq_destroy(&dma); aml_area_munmap(slow, a, memsize); aml_area_munmap(slow, b, memsize); aml_area_munmap(fast, c, memsize); aml_area_linux_destroy(&slow); aml_area_linux_destroy(&fast); - aml_tiling_1d_fini(&tiling); + aml_tiling_1d_destroy(&tiling); aml_finalize(); return 0; } diff --git a/include/aml.h b/include/aml.h index 69a64ac27ef9ebc0581b0e74ac8571a5d7581af8..cf6ffd0a37ed755008711e9b388c41411597b4da 100644 --- a/include/aml.h +++ b/include/aml.h @@ -265,16 +265,6 @@ struct aml_tiling_ops { /** * \todo Doc **/ - int (*init_iterator)(struct aml_tiling_data *tiling, - struct aml_tiling_iterator *iterator, int flags); - /** - * \todo Doc - **/ - int (*fini_iterator)(struct aml_tiling_data *tiling, - struct aml_tiling_iterator *iterator); - /** - * \todo Doc - **/ int (*destroy_iterator)(struct aml_tiling_data *tiling, struct aml_tiling_iterator **iterator); /** @@ -396,23 +386,6 @@ struct aml_tiling_iterator { int aml_tiling_create_iterator(struct aml_tiling *tiling, struct aml_tiling_iterator **iterator, int flags); -/** - * Initializes a tiling iterator. - * @param tiling: an initialized tiling structure. - * @param iterator: an allocated tiling iterator structure. - * @param flags: reserved for future use; pass 0 for now. - * @return 0 if successful; an error code otherwise. - **/ -int aml_tiling_init_iterator(struct aml_tiling *tiling, - struct aml_tiling_iterator *iterator, int flags); - -/** - * Finalize an initialized tiling iterator. - * @param tiling: an initialized tiling structure. - * @param iterator: an initialized tiling iterator structure. - **/ -void aml_tiling_fini_iterator(struct aml_tiling *tiling, - struct aml_tiling_iterator *iterator); /** * Tears down an initialized tiling iterator. * @param tiling: an initialized tiling structure. diff --git a/include/aml/area/linux.h b/include/aml/area/linux.h index 467955aff35892f9838e5a7ade150e74a146d469..72627e08b5f81683b77ee80689c2677cb57ac35e 100644 --- a/include/aml/area/linux.h +++ b/include/aml/area/linux.h @@ -88,23 +88,6 @@ struct aml_area_linux_data { int mmap_flags; }; -/** - * Static declaration of an aml area with linux ops. - **/ -#define AML_AREA_LINUX_DECL(name) \ - struct aml_area_linux_data __ ##name## _inner_data; \ - struct aml_area name = { \ - &aml_area_linux_ops, \ - (struct aml_area_data *)&__ ## name ## _inner_data, \ - } - -/** - * Static declaration of the size of a linux aml area. - **/ -#define AML_AREA_LINUX_ALLOCSIZE \ - (sizeof(struct aml_area_linux_data) + \ - sizeof(struct aml_area)) - /** * \brief Linux area creation. * @@ -137,19 +120,6 @@ int aml_area_linux_create(struct aml_area **area, const int mmap_flags, **/ void aml_area_linux_destroy(struct aml_area **area); -/** - * Initialize a struct aml_area declared using the AML_AREA_LINUX_DECL macro. - * @see aml_area_linux_create() for details on arguments. - */ -int aml_area_linux_init(struct aml_area *area, const int mmap_flags, - const struct aml_bitmap *nodemask, - const int binding_flags); - -/** - * Finalize a struct aml_area initialized with aml_area_linux_init. - */ -void aml_area_linux_fini(struct aml_area *area); - /** * Bind memory of size "size" pointed by "ptr" to binding set in "bind". * If mbind call was not successfull, i.e AML_FAILURE is returned, then errno diff --git a/include/aml/dma/linux-par.h b/include/aml/dma/linux-par.h index 2f74051f403c737fca4eb7a99204e713e4716c98..1e7b7a21e55ace34e313abc10433ce7b62c5bddc 100644 --- a/include/aml/dma/linux-par.h +++ b/include/aml/dma/linux-par.h @@ -62,7 +62,7 @@ struct aml_dma_request_linux_par { /** Inside of a parallel request for linux movement. **/ struct aml_dma_linux_par_data { size_t nbthreads; - struct aml_vector requests; + struct aml_vector *requests; pthread_mutex_t lock; }; @@ -75,7 +75,7 @@ struct aml_dma_linux_par_ops { /** * aml_dma structure for linux based, parallel dma movement - * Needs to be initialized with aml_dma_linux_par_init(). + * Needs to be initialized with aml_dma_linux_par_create(). * Can be passed to generic aml_dma_*() functions. **/ struct aml_dma_linux_par { @@ -83,19 +83,6 @@ struct aml_dma_linux_par { struct aml_dma_linux_par_data data; }; -/** Static declaration of aml_dma_linux_par structure. **/ -#define AML_DMA_LINUX_PAR_DECL(name) \ - struct aml_dma_linux_par __ ##name## _inner_data; \ - struct aml_dma name = { \ - &aml_dma_linux_par_ops, \ - (struct aml_dma_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of aml_dma_linux_par structure size. **/ -#define AML_DMA_LINUX_PAR_ALLOCSIZE \ - (sizeof(struct aml_dma_linux_par) + \ - sizeof(struct aml_dma)) - /** * Allocates and initializes a new parallel DMA. * @@ -110,24 +97,6 @@ struct aml_dma_linux_par { int aml_dma_linux_par_create(struct aml_dma **dma, size_t nbreqs, size_t nbthreads); -/** - * Initializes a new parallel DMA. - * - * @param dma a pointer to a dma declared with the AML_DMA_LINUX_PAR_DECL macro - * @param nbreqs the initial number of slots for asynchronous requests that are - * in-flight (will be increased automatically if necessary). - * @param nbthreads the number of threads to launch for each request. - * - * @return 0 if successful; an error code otherwise. - **/ -int aml_dma_linux_par_init(struct aml_dma *dma, size_t nbreqs, - size_t nbthreads); - -/** - * Finalize a parallel DMA - **/ -void aml_dma_linux_par_fini(struct aml_dma *dma); - /** * Tears down a parallel DMA created with aml_dma_linux_par_create. * @param dma the address of a pointer to a parallel dma. Will be NULL after. diff --git a/include/aml/dma/linux-seq.h b/include/aml/dma/linux-seq.h index 059599625cc608d36b164e3d94104f39b2c707d5..4365ce26b2ef63434ad52dd0dc74bb4cf492f7ce 100644 --- a/include/aml/dma/linux-seq.h +++ b/include/aml/dma/linux-seq.h @@ -49,7 +49,7 @@ struct aml_dma_linux_seq_data { * Requests may be submitted concurrently but will all * be performed by a single thread. **/ - struct aml_vector requests; + struct aml_vector *requests; /** Lock for queuing requests concurrently **/ pthread_mutex_t lock; }; @@ -67,7 +67,7 @@ struct aml_dma_linux_seq_ops { /** * aml_dma structure for linux based, sequential dma movement. - * Needs to be initialized with aml_dma_linux_seq_init(). + * Needs to be initialized with aml_dma_linux_seq_create(). * Can be passed to generic aml_dma_*() functions. **/ struct aml_dma_linux_seq { @@ -76,19 +76,6 @@ struct aml_dma_linux_seq { }; -/** Static declaration of aml_dma_linux_seq structure. **/ -#define AML_DMA_LINUX_SEQ_DECL(name) \ - struct aml_dma_linux_seq __ ##name## _inner_data; \ - struct aml_dma name = { \ - &aml_dma_linux_seq_ops, \ - (struct aml_dma_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration aml_dma_linux_seq structure size **/ -#define AML_DMA_LINUX_SEQ_ALLOCSIZE \ - (sizeof(struct aml_dma_linux_seq) + \ - sizeof(struct aml_dma)) - /** * Allocates and initializes a new sequential DMA. * @@ -101,21 +88,6 @@ struct aml_dma_linux_seq { **/ int aml_dma_linux_seq_create(struct aml_dma **dma, size_t nbreqs); -/** - * Initializes a new sequential DMA. - * - * @param dma a pointer to a dma declared with the AML_DMA_LINUX_SEQ_DECL macro - * @param nbreqs same as the create version. - * - * @return 0 if successful; an error code otherwise. - **/ -int aml_dma_linux_seq_init(struct aml_dma *dma, size_t nbreqs); - -/** - * Finalize a sequential DMA - **/ -void aml_dma_linux_seq_fini(struct aml_dma *dma); - /** * Tears down a sequential DMA created with aml_dma_linux_seq_create. * @param dma the address of a pointer to a sequential dma. Will be NULL after. diff --git a/include/aml/scratch/par.h b/include/aml/scratch/par.h index 760b844b98d1644cf22a026c4b4e7210507df007..0032db2cf014c7bae6e3084a45c37a67005f9486 100644 --- a/include/aml/scratch/par.h +++ b/include/aml/scratch/par.h @@ -67,9 +67,9 @@ struct aml_scratch_par_data { /** Pointer to data in scratch destination **/ void *sch_ptr; /** The tilings involved in ongoing scratch requests **/ - struct aml_vector tilemap; + struct aml_vector *tilemap; /** The set of dma requests submitted to the dma to mode data **/ - struct aml_vector requests; + struct aml_vector *requests; /** A lock to submit concurrent dma requests via the scratchpad **/ pthread_mutex_t lock; }; @@ -93,23 +93,6 @@ struct aml_scratch_par { struct aml_scratch_par_data data; }; -/** - * Static declaration of a parallel scratchpad. - * Needs to be initialized with aml_scratch_par_init() - * @see aml_scratch_par_init() - **/ -#define AML_SCRATCH_PAR_DECL(name) \ - struct aml_scratch_par __ ##name## _inner_data; \ - struct aml_scratch name = { \ - &aml_scratch_par_ops, \ - (struct aml_scratch_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of a parallel scratchpad size. **/ -#define AML_SCRATCH_PAR_ALLOCSIZE \ - (sizeof(struct aml_scratch_par) + \ - sizeof(struct aml_scratch)) - /** * Allocates and initializes a new parallel scratchpad. * @@ -132,26 +115,6 @@ int aml_scratch_par_create(struct aml_scratch **scratch, struct aml_dma *dma, struct aml_tiling *tiling, size_t nbtiles, size_t nbreqs); -/** - * Initializes a new parallel scratchpad. Similar to the create. - * - * @param scratch a pointer to a scratch declared with AML_SCRATCH_PAR_DECL. - * - * @return 0 if successful; an error code otherwise. - **/ -int aml_scratch_par_init(struct aml_scratch *scratch, - struct aml_area *scratch_area, - struct aml_area *src_area, - struct aml_dma *dma, struct aml_tiling *tiling, - size_t nbtiles, size_t nbreqs); - -/** - * Finalize a scratchpad. - * - * @param scratch a pointer to a scratch initialized by aml_scratch_par_init - **/ -void aml_scratch_par_fini(struct aml_scratch *scratch); - /** * Tears down an initialized parallel scratchpad. * diff --git a/include/aml/scratch/seq.h b/include/aml/scratch/seq.h index a5ec8c0fa564c43005d0a6c7f44356a0f8d0a918..6a04ee15eaa8d73e8a4c434ef2b4296d833c01c6 100644 --- a/include/aml/scratch/seq.h +++ b/include/aml/scratch/seq.h @@ -64,9 +64,9 @@ struct aml_scratch_seq_data { /** Pointer to data in scratch destination **/ void *sch_ptr; /** The tilings involved in ongoing scratch requests **/ - struct aml_vector tilemap; + struct aml_vector *tilemap; /** The set of dma requests submitted to the dma to mode data **/ - struct aml_vector requests; + struct aml_vector *requests; /** A lock to submit concurrent dma requests via the scratchpad **/ pthread_mutex_t lock; }; @@ -90,23 +90,6 @@ struct aml_scratch_seq { struct aml_scratch_seq_data data; }; -/** - * Static declaration of a sequential scratchpad. - * Needs to be initialized with aml_scratch_seq_init() - * @see aml_scratch_seq_init() - **/ -#define AML_SCRATCH_SEQ_DECL(name) \ - struct aml_scratch_seq __ ##name## _inner_data; \ - struct aml_scratch name = { \ - &aml_scratch_seq_ops, \ - (struct aml_scratch_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of a sequential scratchpad size. **/ -#define AML_SCRATCH_SEQ_ALLOCSIZE \ - (sizeof(struct aml_scratch_seq) + \ - sizeof(struct aml_scratch)) - /** * Allocates and initializes a new sequential scratchpad. * @@ -129,26 +112,6 @@ int aml_scratch_seq_create(struct aml_scratch **scratch, struct aml_dma *dma, struct aml_tiling *tiling, size_t nbtiles, size_t nbreqs); -/** - * Initializes a new sequential scratchpad. Similar to the create. - * - * @param scratch a pointer to a scratch declared with AML_SCRATCH_SEQ_DECL. - * - * @return 0 if successful; an error code otherwise. - **/ -int aml_scratch_seq_init(struct aml_scratch *scratch, - struct aml_area *scratch_area, - struct aml_area *src_area, - struct aml_dma *dma, struct aml_tiling *tiling, - size_t nbtiles, size_t nbreqs); - -/** - * Finalize a scratchpad. - * - * @param scratch a pointer to a scratch initialized by aml_scratch_seq_init - **/ -void aml_scratch_seq_fini(struct aml_scratch *scratch); - /** * Tears down an initialized sequential scratchpad. * diff --git a/include/aml/tiling/1d.h b/include/aml/tiling/1d.h index 56c3601b461d00dac8ce697de031d3c5e8578154..83de88421520a45daa35ce1ad90927ccddcdb595 100644 --- a/include/aml/tiling/1d.h +++ b/include/aml/tiling/1d.h @@ -44,31 +44,6 @@ struct aml_tiling_iterator_1d_data { struct aml_tiling_1d_data *tiling; }; -/** Static declaration of 1D tiling **/ -#define AML_TILING_1D_DECL(name) \ - struct aml_tiling_1d_data __ ##name## _inner_data; \ - struct aml_tiling name = { \ - &aml_tiling_1d_ops, \ - (struct aml_tiling_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of 1D tiling iterator **/ -#define AML_TILING_ITERATOR_1D_DECL(name) \ - struct aml_tiling_iterator_1d_data __ ##name## _inner_data; \ - struct aml_tiling_iterator name = { \ - &aml_tiling_iterator_1d_ops, \ - (struct aml_tiling_iterator_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of the size of a 1D tiling **/ -#define AML_TILING_1D_ALLOCSIZE (sizeof(struct aml_tiling_1d_data) + \ - sizeof(struct aml_tiling)) - -/** Static declaration of the size of a 1D tiling iterator **/ -#define AML_TILING_ITERATOR_1D_ALLOCSIZE \ - (sizeof(struct aml_tiling_iterator_1d_data) + \ - sizeof(struct aml_tiling_iterator)) - /** * Allocates and initializes a new 1D tiling. * @@ -81,20 +56,6 @@ struct aml_tiling_iterator_1d_data { **/ int aml_tiling_1d_create(struct aml_tiling **tiling, size_t tilesize, size_t totalsize); -/** - * Initializes a tiling. Similar to create. - * - * @param tiling a tiling declared with AML_TILING_1D_DECL. - * @param 0 if successful; an error code otherwise. - **/ -int aml_tiling_1d_init(struct aml_tiling *tiling, size_t tilesize, - size_t totalsize); - -/** - * Finalize a tiling. - **/ -void aml_tiling_1d_fini(struct aml_tiling *tiling); - /** * Tears down an initialized tiling. * diff --git a/include/aml/tiling/2d.h b/include/aml/tiling/2d.h index 4116a1f963642ffb0bfea82cd33a9737da72d4b7..5d14347fb320cf2b3853f0a4e497cfbdcb5a2fd6 100644 --- a/include/aml/tiling/2d.h +++ b/include/aml/tiling/2d.h @@ -60,39 +60,6 @@ struct aml_tiling_iterator_2d_data { struct aml_tiling_2d_data *tiling; }; -/** Static declaration of 2D tiling aranged in row major fashion **/ -#define AML_TILING_2D_ROWMAJOR_DECL(name) \ - struct aml_tiling_2d_data __ ##name## _inner_data; \ - struct aml_tiling name = { \ - &aml_tiling_2d_rowmajor_ops, \ - (struct aml_tiling_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of 2D tiling aranged in column major fashion **/ -#define AML_TILING_2D_COLMAJOR_DECL(name) \ - struct aml_tiling_2d_data __ ##name## _inner_data; \ - struct aml_tiling name = { \ - &aml_tiling_2d_colmajor_ops, \ - (struct aml_tiling_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of 2D tiling iterator **/ -#define AML_TILING_ITERATOR_2D_DECL(name) \ - struct aml_tiling_iterator_2d_data __ ##name## _inner_data; \ - struct aml_tiling_iterator name = { \ - &aml_tiling_iterator_2d_ops, \ - (struct aml_tiling_iterator_data *)&__ ## name ## _inner_data, \ - } - -/** Static declaration of the size of a 2D tiling **/ -#define AML_TILING_2D_ALLOCSIZE (sizeof(struct aml_tiling_2d_data) + \ - sizeof(struct aml_tiling)) - -/** Static declaration of the size of a 2D tiling iterator **/ -#define AML_TILING_ITERATOR_2D_ALLOCSIZE \ - (sizeof(struct aml_tiling_iterator_2d_data) + \ - sizeof(struct aml_tiling_iterator)) - /** * Allocates and initializes a new 2D tiling. * @@ -109,20 +76,6 @@ struct aml_tiling_iterator_2d_data { int aml_tiling_2d_create(struct aml_tiling **tiling, int type, size_t tilesize, size_t totalsize, size_t rowsize, size_t colsize); -/** - * Initializes a tiling. Similar to create. - * - * @param tiling a tiling declared with AML_TILING_2D_DECL. - * @param 0 if successful; an error code otherwise. - **/ -int aml_tiling_2d_init(struct aml_tiling *tiling, int type, - size_t tilesize, size_t totalsize, - size_t rowsize, size_t colsize); - -/** - * Finalize a tiling. - **/ -void aml_tiling_2d_fini(struct aml_tiling *tiling); /** * Tears down an initialized tiling. diff --git a/include/aml/utils/bitmap.h b/include/aml/utils/bitmap.h index 206adbdf8999d57af7292a3369418df1b4097250..796480facc1736c85d14e821552cb4be6b44239e 100644 --- a/include/aml/utils/bitmap.h +++ b/include/aml/utils/bitmap.h @@ -194,17 +194,6 @@ int aml_bitmap_from_string(struct aml_bitmap *bitmap, const char *bitmap_str); **/ char *aml_bitmap_to_string(const struct aml_bitmap *bitmap); -/** - * Static bitmap declaration. - * This macro is not really needed, - * but it is here for consistency with other - * AML blocks. - **/ -#define AML_BITMAP_DECL(name) struct aml_bitmap name - -/** The size in bytes of aml bitmap. **/ -#define AML_BITMAP_ALLOCSIZE (sizeof(struct aml_bitmap)) - /** * Allocate a new empty (all zero) struct aml_bitmap. * @param[out] map pointer to an uninitialized struct aml_bitmap pointer to @@ -215,20 +204,6 @@ char *aml_bitmap_to_string(const struct aml_bitmap *bitmap); **/ int aml_bitmap_create(struct aml_bitmap **map); -/** - * Initialize (zero a struct aml_bitmap). Not necessary on stack allocated - * bitmaps. - * @param map: The bitmap to initialize. - * @return 0 on success (always). - **/ -int aml_bitmap_init(struct aml_bitmap *map); - -/** - * Finalize a struct aml_bitmap. This is an empty function. - * @param map: The bitmap to finalize. - **/ -void aml_bitmap_fini(struct aml_bitmap *map); - /** * Destroy (finalize and free resources) for a struct aml_bitmap created by * aml_bitmap_create. diff --git a/include/aml/utils/vector.h b/include/aml/utils/vector.h index f2705f4c355a0d0772316e4e07c904cd3a1e2e57..6331fc0181afc1097aa0565b8caaea3ebf115024 100644 --- a/include/aml/utils/vector.h +++ b/include/aml/utils/vector.h @@ -44,11 +44,6 @@ struct aml_vector { void *ptr; }; -/** not needed, here for consistency **/ -#define AML_VECTOR_DECL(name) struct aml_vector name -/** not needed, here for consistency **/ -#define AML_VECTOR_ALLOCSIZE (sizeof(struct aml_vector)) - /** * Provides the total number of elements in the vector, including currently * unused ones. @@ -111,21 +106,6 @@ void aml_vector_remove(struct aml_vector *vector, void *elem); int aml_vector_create(struct aml_vector **vector, size_t num, size_t size, size_t key, int na); -/** - * Initializes a vector. Similar to create. - * - * @param vector: a vector declared with AML_VECTOR_DECL - **/ -int aml_vector_init(struct aml_vector *vector, size_t num, size_t size, - size_t key, int na); - -/** - * Finalize a vector. Frees all inner resources. - * - * @param vector: a vector initialized by aml_vector_init. - **/ -void aml_vector_fini(struct aml_vector *vector); - /** * Finalize and free a struct aml_vector. * diff --git a/src/area/linux.c b/src/area/linux.c index 9a78634225ff9068d494a718e459f9d7abb43ca8..497f3c921ba6d2b885017a3b039e37ccac9c0b0b 100644 --- a/src/area/linux.c +++ b/src/area/linux.c @@ -183,41 +183,13 @@ int aml_area_linux_create(struct aml_area **area, const int mmap_flags, const int binding_flags) { struct aml_area *ret = NULL; - intptr_t baseptr, dataptr; - int err = AML_SUCCESS; - - baseptr = (intptr_t) calloc(1, AML_AREA_LINUX_ALLOCSIZE); - if (baseptr == 0) { - *area = NULL; - return -AML_ENOMEM; - } - dataptr = baseptr + sizeof(struct aml_area); - - ret = (struct aml_area *)baseptr; - ret->data = (struct aml_area_data *)dataptr; - ret->ops = &aml_area_linux_ops; - - err = aml_area_linux_init(ret, mmap_flags, nodemask, binding_flags); - if (err) { - free(ret); - ret = NULL; - } - *area = ret; - return err; -} - -int aml_area_linux_init(struct aml_area *area, const int mmap_flags, - const struct aml_bitmap *nodemask, - const int binding_flags) -{ struct aml_area_linux_data *data; + int err; if (area == NULL) return -AML_EINVAL; - data = (struct aml_area_linux_data *)area->data; - if (data == NULL) - return -AML_EINVAL; + *area = NULL; /* check flags */ if (!aml_area_linux_check_mmap_flags(mmap_flags) || @@ -225,14 +197,28 @@ int aml_area_linux_init(struct aml_area *area, const int mmap_flags, return -AML_EINVAL; } + ret = calloc(1, sizeof(struct aml_area)); + if (ret == NULL) + return -AML_ENOMEM; + + ret->ops = &aml_area_linux_ops; + ret->data = calloc(1, sizeof(struct aml_area_linux_data)); + if (ret->data == NULL) { + err = -AML_ENOMEM; + goto err_f_ret; + } + data = (struct aml_area_linux_data *)ret->data; + /* set area_data and area */ data->binding_flags = binding_flags; data->mmap_flags = mmap_flags; /* check/set nodemask */ data->nodeset = numa_get_mems_allowed(); - if (data->nodeset == NULL) - return -AML_ENOMEM; + if (data->nodeset == NULL) { + err = -AML_ENOMEM; + goto err_f_data; + } /* check if the nodemask is compatible with the nodeset */ if (nodemask != NULL) { @@ -243,32 +229,39 @@ int aml_area_linux_init(struct aml_area *area, const int mmap_flags, ; if (aml_last > allowed_last) { - numa_free_nodemask(data->nodeset); - return -AML_EDOM; + err = -AML_EDOM; + goto err_f_node; } aml_bitmap_copy_to_ulong(nodemask, data->nodeset->maskp, data->nodeset->size); } + *area = ret; return AML_SUCCESS; -} - -void aml_area_linux_fini(struct aml_area *area) -{ - if (area == NULL || area->data == NULL) - return; - struct aml_area_linux_data *data = - (struct aml_area_linux_data *) area->data; - +err_f_node: numa_free_nodemask(data->nodeset); +err_f_data: + free(ret->data); +err_f_ret: + free(ret); + return err; } void aml_area_linux_destroy(struct aml_area **area) { + struct aml_area *a; + struct aml_area_linux_data *data; + if (area == NULL) return; - aml_area_linux_fini(*area); - free(*area); + a = *area; + if (a == NULL || a->data == NULL) + return; + + data = (struct aml_area_linux_data *) a->data; + numa_free_nodemask(data->nodeset); + free(data); + free(a); *area = NULL; } diff --git a/src/dma/dma_linux_par.c b/src/dma/dma_linux_par.c index 342c14aeba88535e7d775d8f0283e805a35a4a79..9f0395cfb8d70ef07cd3a4d96245907711224769 100644 --- a/src/dma/dma_linux_par.c +++ b/src/dma/dma_linux_par.c @@ -106,7 +106,7 @@ int aml_dma_linux_par_create_request(struct aml_dma_data *d, struct aml_dma_request_linux_par *req; pthread_mutex_lock(&dma->data.lock); - req = aml_vector_add(&dma->data.requests); + req = aml_vector_add(dma->data.requests); /* init the request */ if (type == AML_DMA_REQUEST_TYPE_COPY) { @@ -158,7 +158,7 @@ int aml_dma_linux_par_destroy_request(struct aml_dma_data *d, aml_dma_request_linux_par_copy_destroy(req); pthread_mutex_lock(&dma->data.lock); - aml_vector_remove(&dma->data.requests, req); + aml_vector_remove(dma->data.requests, req); pthread_mutex_unlock(&dma->data.lock); return 0; } @@ -180,7 +180,7 @@ int aml_dma_linux_par_wait_request(struct aml_dma_data *d, aml_dma_request_linux_par_copy_destroy(req); pthread_mutex_lock(&dma->data.lock); - aml_vector_remove(&dma->data.requests, req); + aml_vector_remove(dma->data.requests, req); pthread_mutex_unlock(&dma->data.lock); return 0; } @@ -195,88 +195,71 @@ struct aml_dma_ops aml_dma_linux_par_ops = { * Init functions: ******************************************************************************/ -int aml_dma_linux_par_create(struct aml_dma **d, size_t nbreqs, +int aml_dma_linux_par_create(struct aml_dma **dma, size_t nbreqs, size_t nbthreads) { struct aml_dma *ret = NULL; - intptr_t baseptr, dataptr; - int err; + struct aml_dma_linux_par *d; - if (d == NULL) + if (dma == NULL) return -AML_EINVAL; + *dma = NULL; + /* alloc */ - baseptr = (intptr_t) calloc(1, AML_DMA_LINUX_PAR_ALLOCSIZE); - if (baseptr == 0) { - *d = NULL; + ret = calloc(1, sizeof(struct aml_dma)); + if (ret == NULL) return -AML_ENOMEM; - } - dataptr = baseptr + sizeof(struct aml_dma); - ret = (struct aml_dma *)baseptr; - ret->data = (struct aml_dma_data *)dataptr; ret->ops = &aml_dma_linux_par_ops; - - err = aml_dma_linux_par_init(ret, nbreqs, nbthreads); - if (err) { - *d = NULL; + ret->data = calloc(1, sizeof(struct aml_dma_linux_par)); + if (ret->data == NULL) { free(ret); - return err; + return -AML_ENOMEM; } - - *d = ret; - return 0; -} - -int aml_dma_linux_par_init(struct aml_dma *d, size_t nbreqs, - size_t nbthreads) -{ - struct aml_dma_linux_par *dma; - - if (d == NULL || d->data == NULL) - return -AML_EINVAL; - dma = (struct aml_dma_linux_par *)d->data; - dma->ops = aml_dma_linux_par_inner_ops; + d = (struct aml_dma_linux_par *)ret->data; + d->ops = aml_dma_linux_par_inner_ops; /* allocate request array */ - dma->data.nbthreads = nbthreads; - aml_vector_init(&dma->data.requests, nbreqs, - sizeof(struct aml_dma_request_linux_par), - offsetof(struct aml_dma_request_linux_par, type), - AML_DMA_REQUEST_TYPE_INVALID); + d->data.nbthreads = nbthreads; + aml_vector_create(&d->data.requests, nbreqs, + sizeof(struct aml_dma_request_linux_par), + offsetof(struct aml_dma_request_linux_par, type), + AML_DMA_REQUEST_TYPE_INVALID); for (size_t i = 0; i < nbreqs; i++) { struct aml_dma_request_linux_par *req = - aml_vector_get(&dma->data.requests, i); + aml_vector_get(d->data.requests, i); - req->thread_data = calloc(dma->data.nbthreads, + req->thread_data = calloc(d->data.nbthreads, sizeof(struct aml_dma_linux_par_thread_data)); } - pthread_mutex_init(&dma->data.lock, NULL); + pthread_mutex_init(&d->data.lock, NULL); + + *dma = ret; return 0; } -void aml_dma_linux_par_fini(struct aml_dma *d) +void aml_dma_linux_par_destroy(struct aml_dma **dma) { - struct aml_dma_linux_par *dma; + struct aml_dma *d; + struct aml_dma_linux_par *l; + if (dma == NULL) + return; + d = *dma; if (d == NULL || d->data == NULL) return; - dma = (struct aml_dma_linux_par *)d->data; - for (size_t i = 0; i < aml_vector_size(&dma->data.requests); i++) { + l = (struct aml_dma_linux_par *)d->data; + for (size_t i = 0; i < aml_vector_size(l->data.requests); i++) { struct aml_dma_request_linux_par *req = - aml_vector_get(&dma->data.requests, i); + aml_vector_get(l->data.requests, i); free(req->thread_data); } - aml_vector_fini(&dma->data.requests); - pthread_mutex_destroy(&dma->data.lock); -} + aml_vector_destroy(&l->data.requests); + pthread_mutex_destroy(&l->data.lock); -void aml_dma_linux_par_destroy(struct aml_dma **d) -{ - if (d == NULL) - return; - aml_dma_linux_par_fini(*d); - free(*d); - *d = NULL; + free(l); + free(d); + *dma = NULL; } diff --git a/src/dma/dma_linux_seq.c b/src/dma/dma_linux_seq.c index 4ad69a4cc09ad0b0809af538d030201483a22d13..21df2176da26102337b34778d751e275804fd387 100644 --- a/src/dma/dma_linux_seq.c +++ b/src/dma/dma_linux_seq.c @@ -83,7 +83,7 @@ int aml_dma_linux_seq_create_request(struct aml_dma_data *d, struct aml_dma_request_linux_seq *req; pthread_mutex_lock(&dma->data.lock); - req = aml_vector_add(&dma->data.requests); + req = aml_vector_add(dma->data.requests); /* init the request */ if (type == AML_DMA_REQUEST_TYPE_COPY) { @@ -121,7 +121,7 @@ int aml_dma_linux_seq_destroy_request(struct aml_dma_data *d, /* enough to remove from request vector */ pthread_mutex_lock(&dma->data.lock); - aml_vector_remove(&dma->data.requests, req); + aml_vector_remove(dma->data.requests, req); pthread_mutex_unlock(&dma->data.lock); return 0; } @@ -154,71 +154,54 @@ struct aml_dma_ops aml_dma_linux_seq_ops = { * Init functions: ******************************************************************************/ -int aml_dma_linux_seq_create(struct aml_dma **d, size_t nbreqs) +int aml_dma_linux_seq_create(struct aml_dma **dma, size_t nbreqs) { struct aml_dma *ret = NULL; - intptr_t baseptr, dataptr; - int err; + struct aml_dma_linux_seq *d; - if (d == NULL) + if (dma == NULL) return -AML_EINVAL; + *dma = NULL; + /* alloc */ - baseptr = (intptr_t) calloc(1, AML_DMA_LINUX_SEQ_ALLOCSIZE); - if (baseptr == 0) { - *d = NULL; + ret = calloc(1, sizeof(struct aml_dma)); + if (ret == NULL) return -AML_ENOMEM; - } - dataptr = baseptr + sizeof(struct aml_dma); - ret = (struct aml_dma *)baseptr; - ret->data = (struct aml_dma_data *)dataptr; - ret->ops = &aml_dma_linux_seq_ops; - - err = aml_dma_linux_seq_init(ret, nbreqs); - if (err) { - *d = NULL; + ret->data = calloc(1, sizeof(struct aml_dma_linux_seq)); + if (ret->data == NULL) { free(ret); - return err; + return -AML_ENOMEM; } + ret->ops = &aml_dma_linux_seq_ops; + d = (struct aml_dma_linux_seq *)ret->data; - *d = ret; - return 0; -} - -int aml_dma_linux_seq_init(struct aml_dma *d, size_t nbreqs) -{ - struct aml_dma_linux_seq *dma; + d->ops = aml_dma_linux_seq_inner_ops; + aml_vector_create(&d->data.requests, nbreqs, + sizeof(struct aml_dma_request_linux_seq), + offsetof(struct aml_dma_request_linux_seq, type), + AML_DMA_REQUEST_TYPE_INVALID); + pthread_mutex_init(&d->data.lock, NULL); - if (d == NULL || d->data == NULL) - return -AML_EINVAL; - dma = (struct aml_dma_linux_seq *)d->data; - dma->ops = aml_dma_linux_seq_inner_ops; - - /* request vector */ - aml_vector_init(&dma->data.requests, nbreqs, - sizeof(struct aml_dma_request_linux_seq), - offsetof(struct aml_dma_request_linux_seq, type), - AML_DMA_REQUEST_TYPE_INVALID); - pthread_mutex_init(&dma->data.lock, NULL); + *dma = ret; return 0; } -void aml_dma_linux_seq_fini(struct aml_dma *d) +void aml_dma_linux_seq_destroy(struct aml_dma **dma) { - if (d == NULL || d->data == NULL) - return; - struct aml_dma_linux_seq *dma = (struct aml_dma_linux_seq *)d->data; + struct aml_dma *d; + struct aml_dma_linux_seq *l; - aml_vector_fini(&dma->data.requests); - pthread_mutex_destroy(&dma->data.lock); -} - -void aml_dma_linux_seq_destroy(struct aml_dma **d) -{ - if (d == NULL) + if (dma == NULL) + return; + d = *dma; + if (d == NULL || d->data == NULL) return; - aml_dma_linux_seq_fini(*d); - free(*d); - *d = NULL; + l = (struct aml_dma_linux_seq *)d->data; + aml_vector_destroy(&l->data.requests); + pthread_mutex_destroy(&l->data.lock); + free(l); + free(d); + *dma = NULL; } diff --git a/src/scratch/scratch_par.c b/src/scratch/scratch_par.c index 283ef951e3efb5b4bc2e2f2c585b630d44523c03..7d76327ca50efc064ebf2c3a83febbd42861c5ea 100644 --- a/src/scratch/scratch_par.c +++ b/src/scratch/scratch_par.c @@ -83,7 +83,7 @@ int aml_scratch_par_create_request(struct aml_scratch_data *d, struct aml_scratch_request_par *req; pthread_mutex_lock(&scratch->data.lock); - req = aml_vector_add(&scratch->data.requests); + req = aml_vector_add(scratch->data.requests); /* init the request */ if (type == AML_SCRATCH_REQUEST_TYPE_PUSH) { int scratchid; @@ -97,7 +97,7 @@ int aml_scratch_par_create_request(struct aml_scratch_data *d, scratchid = va_arg(ap, int); /* find destination tile */ - int *slot = aml_vector_get(&scratch->data.tilemap, scratchid); + int *slot = aml_vector_get(scratch->data.tilemap, scratchid); assert(slot != NULL); *srcid = *slot; @@ -120,11 +120,11 @@ int aml_scratch_par_create_request(struct aml_scratch_data *d, /* find destination tile * We don't use add here because adding a tile means allocating * new tiles on the sch_area too. */ - slot = aml_vector_find(&scratch->data.tilemap, srcid); + slot = aml_vector_find(scratch->data.tilemap, srcid); if (slot == -1) { - slot = aml_vector_find(&scratch->data.tilemap, -1); + slot = aml_vector_find(scratch->data.tilemap, -1); assert(slot != -1); - tile = aml_vector_get(&scratch->data.tilemap, slot); + tile = aml_vector_get(scratch->data.tilemap, slot); *tile = srcid; } else type = AML_SCRATCH_REQUEST_TYPE_NOOP; @@ -167,11 +167,11 @@ int aml_scratch_par_destroy_request(struct aml_scratch_data *d, /* destroy removes the tile from the scratch */ pthread_mutex_lock(&scratch->data.lock); if (req->type == AML_SCRATCH_REQUEST_TYPE_PUSH) - tile = aml_vector_get(&scratch->data.tilemap, req->srcid); + tile = aml_vector_get(scratch->data.tilemap, req->srcid); else if (req->type == AML_SCRATCH_REQUEST_TYPE_PULL) - tile = aml_vector_get(&scratch->data.tilemap, req->dstid); - aml_vector_remove(&scratch->data.tilemap, tile); - aml_vector_remove(&scratch->data.requests, req); + tile = aml_vector_get(scratch->data.tilemap, req->dstid); + aml_vector_remove(scratch->data.tilemap, tile); + aml_vector_remove(scratch->data.requests, req); pthread_mutex_unlock(&scratch->data.lock); return 0; } @@ -194,10 +194,10 @@ int aml_scratch_par_wait_request(struct aml_scratch_data *d, aml_scratch_request_par_destroy(req); pthread_mutex_lock(&scratch->data.lock); if (req->type == AML_SCRATCH_REQUEST_TYPE_PUSH) { - tile = aml_vector_get(&scratch->data.tilemap, req->srcid); - aml_vector_remove(&scratch->data.tilemap, tile); + tile = aml_vector_get(scratch->data.tilemap, req->srcid); + aml_vector_remove(scratch->data.tilemap, tile); } - aml_vector_remove(&scratch->data.requests, req); + aml_vector_remove(scratch->data.requests, req); pthread_mutex_unlock(&scratch->data.lock); return 0; } @@ -218,9 +218,9 @@ int aml_scratch_par_release(struct aml_scratch_data *d, int scratchid) int *tile; pthread_mutex_lock(&scratch->data.lock); - tile = aml_vector_get(&scratch->data.tilemap, scratchid); + tile = aml_vector_get(scratch->data.tilemap, scratchid); if (tile != NULL) - aml_vector_remove(&scratch->data.tilemap, tile); + aml_vector_remove(scratch->data.tilemap, tile); pthread_mutex_unlock(&scratch->data.lock); return 0; } @@ -237,102 +237,79 @@ struct aml_scratch_ops aml_scratch_par_ops = { * Init functions: ******************************************************************************/ -int aml_scratch_par_create(struct aml_scratch **d, +int aml_scratch_par_create(struct aml_scratch **scratch, struct aml_area *scratch_area, struct aml_area *src_area, struct aml_dma *dma, struct aml_tiling *tiling, size_t nbtiles, size_t nbreqs) { struct aml_scratch *ret = NULL; - intptr_t baseptr, dataptr; - int err; + struct aml_scratch_par *s; - if (d == NULL) + if (scratch == NULL + || scratch_area == NULL || src_area == NULL + || dma == NULL || tiling == NULL) return -AML_EINVAL; + *scratch = NULL; + /* alloc */ - baseptr = (intptr_t) calloc(1, AML_SCRATCH_PAR_ALLOCSIZE); - if (baseptr == 0) { - *d = NULL; + ret = calloc(1, sizeof(struct aml_scratch)); + if (ret == NULL) return -AML_ENOMEM; - } - dataptr = baseptr + sizeof(struct aml_scratch); - ret = (struct aml_scratch *)baseptr; - ret->data = (struct aml_scratch_data *)dataptr; ret->ops = &aml_scratch_par_ops; - - err = aml_scratch_par_init(ret, scratch_area, src_area, dma, - tiling, nbtiles, nbreqs); - if (err) { - *d = NULL; + ret->data = calloc(1, sizeof(struct aml_scratch_par)); + if (ret->data == NULL) { free(ret); - return err; + return -AML_ENOMEM; } + s = (struct aml_scratch_par *)ret->data; + s->ops = aml_scratch_par_inner_ops; - *d = ret; - return 0; -} - -int aml_scratch_par_init(struct aml_scratch *d, - struct aml_area *scratch_area, - struct aml_area *src_area, - struct aml_dma *dma, struct aml_tiling *tiling, - size_t nbtiles, size_t nbreqs) -{ - struct aml_scratch_par *scratch; - - if (d == NULL || d->data == NULL - || scratch_area == NULL || src_area == NULL - || dma == NULL || tiling == NULL) - return -AML_EINVAL; - - scratch = (struct aml_scratch_par *)d->data; - scratch->ops = aml_scratch_par_inner_ops; - - scratch->data.sch_area = scratch_area; - scratch->data.src_area = src_area; - scratch->data.dma = dma; - scratch->data.tiling = tiling; + s->data.sch_area = scratch_area; + s->data.src_area = src_area; + s->data.dma = dma; + s->data.tiling = tiling; /* allocate request array */ - aml_vector_init(&scratch->data.requests, nbreqs, - sizeof(struct aml_scratch_request_par), - offsetof(struct aml_scratch_request_par, type), - AML_SCRATCH_REQUEST_TYPE_INVALID); + aml_vector_create(&s->data.requests, nbreqs, + sizeof(struct aml_scratch_request_par), + offsetof(struct aml_scratch_request_par, type), + AML_SCRATCH_REQUEST_TYPE_INVALID); - /* scratch init */ - aml_vector_init(&scratch->data.tilemap, nbtiles, sizeof(int), 0, -1); - size_t tilesize = aml_tiling_tilesize(scratch->data.tiling, 0); + /* s init */ + aml_vector_create(&s->data.tilemap, nbtiles, sizeof(int), 0, -1); + size_t tilesize = aml_tiling_tilesize(s->data.tiling, 0); - scratch->data.scratch_size = nbtiles * tilesize; - scratch->data.sch_ptr = aml_area_mmap(scratch->data.sch_area, + s->data.scratch_size = nbtiles * tilesize; + s->data.sch_ptr = aml_area_mmap(s->data.sch_area, NULL, - scratch->data.scratch_size); - pthread_mutex_init(&scratch->data.lock, NULL); + s->data.scratch_size); + pthread_mutex_init(&s->data.lock, NULL); + + *scratch = ret; return 0; } -void aml_scratch_par_fini(struct aml_scratch *d) +void aml_scratch_par_destroy(struct aml_scratch **scratch) { - struct aml_scratch_par *scratch; + struct aml_scratch *s; + struct aml_scratch_par *inner; - if (d == NULL) + if (scratch == NULL) return; - scratch = (struct aml_scratch_par *)d->data; - aml_vector_fini(&scratch->data.requests); - aml_vector_fini(&scratch->data.tilemap); - aml_area_munmap(scratch->data.sch_area, - scratch->data.sch_ptr, - scratch->data.scratch_size); - pthread_mutex_destroy(&scratch->data.lock); -} - -void aml_scratch_par_destroy(struct aml_scratch **d) -{ - if (d == NULL) + s = *scratch; + if (s == NULL || s->data == NULL) return; - aml_scratch_par_fini(*d); - free(*d); - *d = NULL; + inner = (struct aml_scratch_par *)s->data; + aml_vector_destroy(&inner->data.requests); + aml_vector_destroy(&inner->data.tilemap); + aml_area_munmap(inner->data.sch_area, + inner->data.sch_ptr, + inner->data.scratch_size); + pthread_mutex_destroy(&inner->data.lock); + free(inner); + free(s); + *scratch = NULL; } diff --git a/src/scratch/scratch_seq.c b/src/scratch/scratch_seq.c index f0076c879d98678178ad30633ee01603ce41bd27..c826e3b34e73a9a46ac6a03373757c278eda809e 100644 --- a/src/scratch/scratch_seq.c +++ b/src/scratch/scratch_seq.c @@ -81,7 +81,7 @@ int aml_scratch_seq_create_request(struct aml_scratch_data *d, struct aml_scratch_request_seq *req; pthread_mutex_lock(&scratch->data.lock); - req = aml_vector_add(&scratch->data.requests); + req = aml_vector_add(scratch->data.requests); /* init the request */ if (type == AML_SCRATCH_REQUEST_TYPE_PUSH) { int scratchid; @@ -95,7 +95,7 @@ int aml_scratch_seq_create_request(struct aml_scratch_data *d, scratchid = va_arg(ap, int); /* find destination tile */ - int *slot = aml_vector_get(&scratch->data.tilemap, scratchid); + int *slot = aml_vector_get(scratch->data.tilemap, scratchid); assert(slot != NULL); *srcid = *slot; @@ -123,11 +123,11 @@ int aml_scratch_seq_create_request(struct aml_scratch_data *d, /* TODO: this is kind of a bug: we reuse a tile, instead of * creating a no-op request */ - slot = aml_vector_find(&scratch->data.tilemap, srcid); + slot = aml_vector_find(scratch->data.tilemap, srcid); if (slot == -1) { - slot = aml_vector_find(&scratch->data.tilemap, -1); + slot = aml_vector_find(scratch->data.tilemap, -1); assert(slot != -1); - tile = aml_vector_get(&scratch->data.tilemap, slot); + tile = aml_vector_get(scratch->data.tilemap, slot); *tile = srcid; } else type = AML_SCRATCH_REQUEST_TYPE_NOOP; @@ -167,11 +167,11 @@ int aml_scratch_seq_destroy_request(struct aml_scratch_data *d, /* destroy removes the tile from the scratch */ pthread_mutex_lock(&scratch->data.lock); if (req->type == AML_SCRATCH_REQUEST_TYPE_PUSH) - tile = aml_vector_get(&scratch->data.tilemap, req->srcid); + tile = aml_vector_get(scratch->data.tilemap, req->srcid); else if (req->type == AML_SCRATCH_REQUEST_TYPE_PULL) - tile = aml_vector_get(&scratch->data.tilemap, req->dstid); - aml_vector_remove(&scratch->data.tilemap, tile); - aml_vector_remove(&scratch->data.requests, req); + tile = aml_vector_get(scratch->data.tilemap, req->dstid); + aml_vector_remove(scratch->data.tilemap, tile); + aml_vector_remove(scratch->data.requests, req); pthread_mutex_unlock(&scratch->data.lock); return 0; } @@ -194,10 +194,10 @@ int aml_scratch_seq_wait_request(struct aml_scratch_data *d, aml_scratch_request_seq_destroy(req); pthread_mutex_lock(&scratch->data.lock); if (req->type == AML_SCRATCH_REQUEST_TYPE_PUSH) { - tile = aml_vector_get(&scratch->data.tilemap, req->srcid); - aml_vector_remove(&scratch->data.tilemap, tile); + tile = aml_vector_get(scratch->data.tilemap, req->srcid); + aml_vector_remove(scratch->data.tilemap, tile); } - aml_vector_remove(&scratch->data.requests, req); + aml_vector_remove(scratch->data.requests, req); pthread_mutex_unlock(&scratch->data.lock); return 0; } @@ -218,9 +218,9 @@ int aml_scratch_seq_release(struct aml_scratch_data *d, int scratchid) int *tile; pthread_mutex_lock(&scratch->data.lock); - tile = aml_vector_get(&scratch->data.tilemap, scratchid); + tile = aml_vector_get(scratch->data.tilemap, scratchid); if (tile != NULL) - aml_vector_remove(&scratch->data.tilemap, tile); + aml_vector_remove(scratch->data.tilemap, tile); pthread_mutex_unlock(&scratch->data.lock); return 0; } @@ -237,102 +237,79 @@ struct aml_scratch_ops aml_scratch_seq_ops = { * Init functions: ******************************************************************************/ -int aml_scratch_seq_create(struct aml_scratch **d, +int aml_scratch_seq_create(struct aml_scratch **scratch, struct aml_area *scratch_area, struct aml_area *src_area, struct aml_dma *dma, struct aml_tiling *tiling, size_t nbtiles, size_t nbreqs) { struct aml_scratch *ret = NULL; - intptr_t baseptr, dataptr; - int err; + struct aml_scratch_seq *s; - if (d == NULL) + if (scratch == NULL + || scratch_area == NULL || src_area == NULL + || dma == NULL || tiling == NULL) return -AML_EINVAL; + *scratch = NULL; + /* alloc */ - baseptr = (intptr_t) calloc(1, AML_SCRATCH_SEQ_ALLOCSIZE); - if (baseptr == 0) { - *d = NULL; + ret = calloc(1, sizeof(struct aml_scratch)); + if (ret == NULL) return -AML_ENOMEM; - } - dataptr = baseptr + sizeof(struct aml_scratch); - ret = (struct aml_scratch *)baseptr; - ret->data = (struct aml_scratch_data *)dataptr; ret->ops = &aml_scratch_seq_ops; - - err = aml_scratch_seq_init(ret, scratch_area, src_area, dma, - tiling, nbtiles, nbreqs); - if (err) { - *d = NULL; + ret->data = calloc(1, sizeof(struct aml_scratch_seq)); + if (ret->data == NULL) { free(ret); - return err; + return -AML_ENOMEM; } + s = (struct aml_scratch_seq *)ret->data; + s->ops = aml_scratch_seq_inner_ops; - *d = ret; - return 0; -} - -int aml_scratch_seq_init(struct aml_scratch *d, - struct aml_area *scratch_area, - struct aml_area *src_area, - struct aml_dma *dma, struct aml_tiling *tiling, - size_t nbtiles, size_t nbreqs) -{ - struct aml_scratch_seq *scratch; - - if (d == NULL || d->data == NULL - || scratch_area == NULL || src_area == NULL - || dma == NULL || tiling == NULL) - return -AML_EINVAL; - - scratch = (struct aml_scratch_seq *)d->data; - scratch->ops = aml_scratch_seq_inner_ops; - - scratch->data.sch_area = scratch_area; - scratch->data.src_area = src_area; - scratch->data.dma = dma; - scratch->data.tiling = tiling; + s->data.sch_area = scratch_area; + s->data.src_area = src_area; + s->data.dma = dma; + s->data.tiling = tiling; /* allocate request array */ - aml_vector_init(&scratch->data.requests, nbreqs, - sizeof(struct aml_scratch_request_seq), - offsetof(struct aml_scratch_request_seq, type), - AML_SCRATCH_REQUEST_TYPE_INVALID); + aml_vector_create(&s->data.requests, nbreqs, + sizeof(struct aml_scratch_request_seq), + offsetof(struct aml_scratch_request_seq, type), + AML_SCRATCH_REQUEST_TYPE_INVALID); - /* scratch init */ - aml_vector_init(&scratch->data.tilemap, nbtiles, sizeof(int), 0, -1); - size_t tilesize = aml_tiling_tilesize(scratch->data.tiling, 0); + /* s init */ + aml_vector_create(&s->data.tilemap, nbtiles, sizeof(int), 0, -1); + size_t tilesize = aml_tiling_tilesize(s->data.tiling, 0); - scratch->data.scratch_size = nbtiles * tilesize; - scratch->data.sch_ptr = aml_area_mmap(scratch->data.sch_area, + s->data.scratch_size = nbtiles * tilesize; + s->data.sch_ptr = aml_area_mmap(s->data.sch_area, NULL, - scratch->data.scratch_size); - pthread_mutex_init(&scratch->data.lock, NULL); + s->data.scratch_size); + pthread_mutex_init(&s->data.lock, NULL); + + *scratch = ret; return 0; } -void aml_scratch_seq_fini(struct aml_scratch *d) +void aml_scratch_seq_destroy(struct aml_scratch **scratch) { - struct aml_scratch_seq *scratch; + struct aml_scratch *s; + struct aml_scratch_seq *inner; - if (d == NULL) + if (scratch == NULL) return; - scratch = (struct aml_scratch_seq *)d->data; - aml_vector_fini(&scratch->data.requests); - aml_vector_fini(&scratch->data.tilemap); - aml_area_munmap(scratch->data.sch_area, - scratch->data.sch_ptr, - scratch->data.scratch_size); - pthread_mutex_destroy(&scratch->data.lock); -} - -void aml_scratch_seq_destroy(struct aml_scratch **d) -{ - if (d == NULL) + s = *scratch; + if (s == NULL || s->data == NULL) return; - aml_scratch_seq_fini(*d); - free(*d); - *d = NULL; + inner = (struct aml_scratch_seq *)s->data; + aml_vector_destroy(&inner->data.requests); + aml_vector_destroy(&inner->data.tilemap); + aml_area_munmap(inner->data.sch_area, + inner->data.sch_ptr, + inner->data.scratch_size); + pthread_mutex_destroy(&inner->data.lock); + free(inner); + free(s); + *scratch = NULL; } diff --git a/src/tiling/tiling.c b/src/tiling/tiling.c index 94d0c579e3f57f1405190920c7bcae5b766f7b5f..d77390a3ed65dc871b3662e859f51b614277310f 100644 --- a/src/tiling/tiling.c +++ b/src/tiling/tiling.c @@ -100,22 +100,6 @@ int aml_tiling_create_iterator(struct aml_tiling *t, return t->ops->create_iterator(t->data, it, flags); } -int aml_tiling_init_iterator(struct aml_tiling *t, - struct aml_tiling_iterator *it, int flags) -{ - assert(t != NULL); - assert(it != NULL); - return t->ops->init_iterator(t->data, it, flags); -} - -void aml_tiling_fini_iterator(struct aml_tiling *t, - struct aml_tiling_iterator *it) -{ - assert(t != NULL); - assert(it != NULL); - t->ops->fini_iterator(t->data, it); -} - void aml_tiling_destroy_iterator(struct aml_tiling *t, struct aml_tiling_iterator **it) { diff --git a/src/tiling/tiling_1d.c b/src/tiling/tiling_1d.c index 3fe78ad1aa422e1dd90b9179cd52647e053dbce1..ee4c7242196f13d81aa81ade1166e8a294bc8231 100644 --- a/src/tiling/tiling_1d.c +++ b/src/tiling/tiling_1d.c @@ -116,43 +116,54 @@ int aml_tiling_1d_init_iterator(struct aml_tiling_data *t, return 0; } -int aml_tiling_1d_create_iterator(struct aml_tiling_data *t, +int aml_tiling_1d_create_iterator(struct aml_tiling_data *tiling, struct aml_tiling_iterator **it, int flags) { - intptr_t baseptr, dataptr; struct aml_tiling_iterator *ret; + struct aml_tiling_iterator_1d_data *data; + (void)flags; - baseptr = (intptr_t) calloc(1, AML_TILING_ITERATOR_1D_ALLOCSIZE); - dataptr = baseptr + sizeof(struct aml_tiling_iterator); + if (it == NULL) + return -AML_EINVAL; - ret = (struct aml_tiling_iterator *)baseptr; - ret->data = (struct aml_tiling_iterator_data *)dataptr; + *it = NULL; - aml_tiling_1d_init_iterator(t, ret, flags); - *it = ret; - return 0; -} + ret = calloc(1, sizeof(struct aml_tiling_iterator)); + if (ret == NULL) + return -AML_ENOMEM; -int aml_tiling_1d_fini_iterator(struct aml_tiling_data *t, - struct aml_tiling_iterator *it) -{ - (void)t; - (void)it; - return 0; + ret->ops = &aml_tiling_iterator_1d_ops; + ret->data = calloc(1, sizeof(struct aml_tiling_iterator_1d_data)); + if (ret->data == NULL) { + free(ret); + return -AML_ENOMEM; + } + data = (struct aml_tiling_iterator_1d_data *)ret->data; + data->i = 0; + data->tiling = (struct aml_tiling_1d_data *)tiling; + *it = ret; + return AML_SUCCESS; } int aml_tiling_1d_destroy_iterator(struct aml_tiling_data *t, - struct aml_tiling_iterator **it) + struct aml_tiling_iterator **iter) { + struct aml_tiling_iterator *it; (void)t; - free(*it); - return 0; + + if (iter == NULL) + return -AML_EINVAL; + it = *iter; + if (it == NULL || it->data == NULL) + return -AML_EINVAL; + free(it->data); + free(it); + *iter = NULL; + return AML_SUCCESS; } struct aml_tiling_ops aml_tiling_1d_ops = { aml_tiling_1d_create_iterator, - aml_tiling_1d_init_iterator, - aml_tiling_1d_fini_iterator, aml_tiling_1d_destroy_iterator, aml_tiling_1d_tileid, aml_tiling_1d_tilesize, @@ -164,68 +175,48 @@ struct aml_tiling_ops aml_tiling_1d_ops = { * 1D create/destroy ******************************************************************************/ -int aml_tiling_1d_create(struct aml_tiling **t, +int aml_tiling_1d_create(struct aml_tiling **tiling, size_t tilesize, size_t totalsize) { struct aml_tiling *ret = NULL; - intptr_t baseptr, dataptr; - int err; + struct aml_tiling_1d_data *t; - if (t == NULL) + if (tiling == NULL || tilesize > totalsize) return -AML_EINVAL; + *tiling = NULL; + /* alloc */ - baseptr = (intptr_t) calloc(1, AML_TILING_1D_ALLOCSIZE); - if (baseptr == 0) { - *t = NULL; + ret = calloc(1, sizeof(struct aml_tiling)); + if (ret == NULL) return -AML_ENOMEM; - } - dataptr = baseptr + sizeof(struct aml_tiling); - ret = (struct aml_tiling *)baseptr; - ret->data = (struct aml_tiling_data *)dataptr; ret->ops = &aml_tiling_1d_ops; - - err = aml_tiling_1d_init(ret, tilesize, totalsize); - if (err) { + ret->data = calloc(1, sizeof(struct aml_tiling_1d_data)); + if (ret->data == NULL) { free(ret); - ret = NULL; + return -AML_ENOMEM; } + t = (struct aml_tiling_1d_data *) ret->data; - *t = ret; - return err; -} - - -int aml_tiling_1d_init(struct aml_tiling *t, - size_t tilesize, size_t totalsize) -{ - struct aml_tiling_1d_data *data; - - if (t == NULL || t->data == NULL) - return -AML_EINVAL; - data = (struct aml_tiling_1d_data *)t->data; + t->blocksize = tilesize; + t->totalsize = totalsize; - if (tilesize > totalsize) - return -AML_EINVAL; - - data->blocksize = tilesize; - data->totalsize = totalsize; - return 0; + *tiling = ret; + return AML_SUCCESS; } -void aml_tiling_1d_fini(struct aml_tiling *t) +void aml_tiling_1d_destroy(struct aml_tiling **tiling) { - /* nothing to do */ - (void)t; -} + struct aml_tiling *t; - -void aml_tiling_1d_destroy(struct aml_tiling **t) -{ - if (t == NULL) + if (tiling == NULL) + return; + t = *tiling; + if (t == NULL || t->data == NULL) return; - free(*t); - *t = NULL; + free(t->data); + free(t); + *tiling = NULL; } diff --git a/src/tiling/tiling_2d.c b/src/tiling/tiling_2d.c index 2de8a2f144cf39af9c76f93bf99629f2cb971adc..84940e40b99dbb0de307687037289634df61a467 100644 --- a/src/tiling/tiling_2d.c +++ b/src/tiling/tiling_2d.c @@ -124,56 +124,54 @@ int aml_tiling_2d_ndims(const struct aml_tiling_data *t, va_list ap) return 0; } -int aml_tiling_2d_init_iterator(struct aml_tiling_data *t, - struct aml_tiling_iterator *it, int flags) -{ - assert(it->data != NULL); - (void)flags; - struct aml_tiling_iterator_2d_data *data = - (struct aml_tiling_iterator_2d_data *)it->data; - it->ops = &aml_tiling_iterator_2d_ops; - data->i = 0; - data->tiling = (struct aml_tiling_2d_data *)t; - return 0; -} - -int aml_tiling_2d_create_iterator(struct aml_tiling_data *t, +int aml_tiling_2d_create_iterator(struct aml_tiling_data *tiling, struct aml_tiling_iterator **it, int flags) { - intptr_t baseptr, dataptr; struct aml_tiling_iterator *ret; + struct aml_tiling_iterator_2d_data *data; + (void)flags; - baseptr = (intptr_t) calloc(1, AML_TILING_ITERATOR_2D_ALLOCSIZE); - dataptr = baseptr + sizeof(struct aml_tiling_iterator); + if (it == NULL) + return -AML_EINVAL; - ret = (struct aml_tiling_iterator *)baseptr; - ret->data = (struct aml_tiling_iterator_data *)dataptr; + *it = NULL; - aml_tiling_2d_init_iterator(t, ret, flags); - *it = ret; - return 0; -} + ret = calloc(1, sizeof(struct aml_tiling_iterator)); + if (ret == NULL) + return -AML_ENOMEM; -int aml_tiling_2d_fini_iterator(struct aml_tiling_data *t, - struct aml_tiling_iterator *it) -{ - (void)t; - (void)it; - return 0; + ret->ops = &aml_tiling_iterator_2d_ops; + ret->data = calloc(1, sizeof(struct aml_tiling_iterator_2d_data)); + if (ret->data == NULL) { + free(ret); + return -AML_ENOMEM; + } + data = (struct aml_tiling_iterator_2d_data *)ret->data; + data->i = 0; + data->tiling = (struct aml_tiling_2d_data *)tiling; + *it = ret; + return AML_SUCCESS; } int aml_tiling_2d_destroy_iterator(struct aml_tiling_data *t, - struct aml_tiling_iterator **it) + struct aml_tiling_iterator **iter) { + struct aml_tiling_iterator *it; (void)t; - free(*it); - return 0; + + if (iter == NULL) + return -AML_EINVAL; + it = *iter; + if (it == NULL || it->data == NULL) + return -AML_EINVAL; + free(it->data); + free(it); + *iter = NULL; + return AML_SUCCESS; } struct aml_tiling_ops aml_tiling_2d_rowmajor_ops = { aml_tiling_2d_create_iterator, - aml_tiling_2d_init_iterator, - aml_tiling_2d_fini_iterator, aml_tiling_2d_destroy_iterator, aml_tiling_2d_rowmajor_tileid, aml_tiling_2d_tilesize, @@ -183,8 +181,6 @@ struct aml_tiling_ops aml_tiling_2d_rowmajor_ops = { struct aml_tiling_ops aml_tiling_2d_colmajor_ops = { aml_tiling_2d_create_iterator, - aml_tiling_2d_init_iterator, - aml_tiling_2d_fini_iterator, aml_tiling_2d_destroy_iterator, aml_tiling_2d_colmajor_tileid, aml_tiling_2d_tilesize, @@ -196,81 +192,62 @@ struct aml_tiling_ops aml_tiling_2d_colmajor_ops = { * 2d create/destroy ******************************************************************************/ -int aml_tiling_2d_create(struct aml_tiling **t, int type, +int aml_tiling_2d_create(struct aml_tiling **tiling, int type, size_t tilesize, size_t totalsize, size_t rowsize, size_t colsize) { struct aml_tiling *ret = NULL; - intptr_t baseptr, dataptr; - int err; + struct aml_tiling_2d_data *data; - if (t == NULL) + if (tiling == NULL) return -AML_EINVAL; if (type != AML_TILING_TYPE_2D_ROWMAJOR && type != AML_TILING_TYPE_2D_COLMAJOR) return -AML_EINVAL; + if (tilesize > totalsize) + return -AML_EINVAL; + + *tiling = NULL; + /* alloc */ - baseptr = (intptr_t) calloc(1, AML_TILING_2D_ALLOCSIZE); - if (baseptr == 0) { - *t = NULL; + ret = calloc(1, sizeof(struct aml_tiling)); + if (ret == NULL) return -AML_ENOMEM; - } - dataptr = baseptr + sizeof(struct aml_tiling); - ret = (struct aml_tiling *)baseptr; - ret->data = (struct aml_tiling_data *)dataptr; if (type == AML_TILING_TYPE_2D_ROWMAJOR) ret->ops = &aml_tiling_2d_rowmajor_ops; else ret->ops = &aml_tiling_2d_colmajor_ops; - err = aml_tiling_2d_init(ret, type, tilesize, totalsize, - rowsize, colsize); - if (err) { + ret->data = calloc(1, sizeof(struct aml_tiling_2d_data)); + if (ret->data == NULL) { free(ret); - ret = NULL; + return -AML_ENOMEM; } - - *t = ret; - return err; -} - - -int aml_tiling_2d_init(struct aml_tiling *t, int type, - size_t tilesize, size_t totalsize, - size_t rowsize, size_t colsize) -{ - struct aml_tiling_2d_data *data; - (void)type; - - if (t == NULL || t->data == NULL) - return -AML_EINVAL; - data = (struct aml_tiling_2d_data *)t->data; - - if (tilesize > totalsize) - return -AML_EINVAL; + data = (struct aml_tiling_2d_data *)ret->data; data->blocksize = tilesize; data->totalsize = totalsize; data->ndims[0] = rowsize; data->ndims[1] = colsize; - return 0; -} -void aml_tiling_2d_fini(struct aml_tiling *t) -{ - /* nothing to do */ - (void)t; + *tiling = ret; + return AML_SUCCESS; } - -void aml_tiling_2d_destroy(struct aml_tiling **t) +void aml_tiling_2d_destroy(struct aml_tiling **tiling) { - if (t == NULL) + struct aml_tiling *t; + + if (tiling == NULL) + return; + t = *tiling; + if (t == NULL || t->data == NULL) return; - free(*t); - *t = NULL; + free(t->data); + free(t); + *tiling = NULL; } diff --git a/src/utils/bitmap.c b/src/utils/bitmap.c index a6d38d121b0efd813e0e03400adbe9e8d98412e6..f282e3fd4b4c67a70d476fe74954432d283435ea 100644 --- a/src/utils/bitmap.c +++ b/src/utils/bitmap.c @@ -301,35 +301,16 @@ int aml_bitmap_from_string(struct aml_bitmap *bitmap, const char *bitmap_str) int aml_bitmap_create(struct aml_bitmap **map) { - struct aml_bitmap *b = malloc(sizeof(struct aml_bitmap)); + struct aml_bitmap *b = calloc(1, sizeof(struct aml_bitmap)); if (b == NULL) { *map = NULL; return -AML_ENOMEM; } - aml_bitmap_zero(b); *map = b; return 0; } -/** - * Initialize (zero a struct aml_bitmap). Not necessary on stack allocated - * bitmaps. - * @return 0 on success (always). - **/ -int aml_bitmap_init(struct aml_bitmap *map) -{ - aml_bitmap_zero(map); - return 0; -} - -/** - * Finalize a struct aml_bitmap. This is an empty function. - **/ -void aml_bitmap_fini(__attribute__ ((unused)) struct aml_bitmap *map) -{ -} - /** * Destroy (finalize and free resources) for a struct aml_bitmap created by * aml_bitmap_create. diff --git a/src/utils/vector.c b/src/utils/vector.c index ea111203ffd17ac5436681c7fd0d9d8aaf901e33..607ea98b7e2a92ef74fc25c6dc5e1730e59e65be 100644 --- a/src/utils/vector.c +++ b/src/utils/vector.c @@ -95,14 +95,14 @@ void aml_vector_remove(struct aml_vector *vec, void *elem) } /******************************************************************************* - * Init/destroy: + * Create/Destroy: ******************************************************************************/ int aml_vector_create(struct aml_vector **vec, size_t reserve, size_t size, size_t key, int na) { struct aml_vector *ret = NULL; - int err; + void *ptr; if (vec == NULL) return -AML_EINVAL; @@ -112,53 +112,40 @@ int aml_vector_create(struct aml_vector **vec, size_t reserve, size_t size, *vec = NULL; return -AML_ENOMEM; } - err = aml_vector_init(ret, reserve, size, key, na); - if (err) { - *vec = NULL; - free(ret); - return err; - } - *vec = ret; - return 0; -} - - -int aml_vector_init(struct aml_vector *vec, size_t reserve, size_t size, - size_t key, int na) -{ - void *ptr; - - if (vec == NULL) - return -AML_EINVAL; ptr = calloc(reserve, size); - if (ptr == NULL) + if (ptr == NULL) { + free(ret); + *vec = NULL; return -AML_ENOMEM; + } - vec->sz = size; - vec->off = key; - vec->na = na; - vec->nbelems = reserve; - vec->ptr = ptr; - for (size_t i = 0; i < vec->nbelems; i++) { - int *k = AML_VECTOR_KEY_P(vec, i); + ret->sz = size; + ret->off = key; + ret->na = na; + ret->nbelems = reserve; + ret->ptr = ptr; + for (size_t i = 0; i < ret->nbelems; i++) { + int *k = AML_VECTOR_KEY_P(ret, i); *k = na; } + + *vec = ret; return 0; } -void aml_vector_fini(struct aml_vector *vec) +void aml_vector_destroy(struct aml_vector **vec) { + struct aml_vector *v; + if (vec == NULL) return; - free(vec->ptr); -} -void aml_vector_destroy(struct aml_vector **vec) -{ - if (vec == NULL) + v = *vec; + if (v == NULL) return; - aml_vector_fini(*vec); - free(*vec); + + free(v->ptr); + free(v); *vec = NULL; } diff --git a/tests/dma/test_dma_linux_par.c b/tests/dma/test_dma_linux_par.c index d9af19301fbf504a3d84eaa5e854559cc311198c..3132d30dff71ad6530b13ae849a18abaabda053c 100644 --- a/tests/dma/test_dma_linux_par.c +++ b/tests/dma/test_dma_linux_par.c @@ -19,23 +19,19 @@ int main(int argc, char *argv[]) { - AML_TILING_1D_DECL(tiling); - AML_DMA_LINUX_PAR_DECL(dma); - struct aml_bitmap nodemask; + struct aml_tiling *tiling; + struct aml_dma *dma; void *dst, *src; /* library initialization */ aml_init(&argc, &argv); /* initialize all the supporting struct */ - assert(!aml_tiling_1d_init(&tiling, TILESIZE*_SC_PAGE_SIZE, - TILESIZE*_SC_PAGE_SIZE*NBTILES)); - aml_bitmap_zero(&nodemask); - aml_bitmap_set(&nodemask, 0); - + assert(!aml_tiling_1d_create(&tiling, TILESIZE*_SC_PAGE_SIZE, + TILESIZE*_SC_PAGE_SIZE*NBTILES)); size_t maxrequests = NBTILES; size_t maxthreads = 4; - assert(!aml_dma_linux_par_init(&dma, maxrequests, maxthreads)); + assert(!aml_dma_linux_par_create(&dma, maxrequests, maxthreads)); /* allocate some memory */ src = aml_area_mmap(&aml_area_linux, NULL, TILESIZE*_SC_PAGE_SIZE*NBTILES); @@ -48,15 +44,15 @@ int main(int argc, char *argv[]) /* move some stuff by copy */ for(int i = 0; i < NBTILES; i++) - aml_dma_copy(&dma, &tiling, dst, i, &tiling, src, i); + aml_dma_copy(dma, tiling, dst, i, tiling, src, i); assert(!memcmp(src, dst, TILESIZE*_SC_PAGE_SIZE*NBTILES)); /* delete everything */ - aml_dma_linux_par_fini(&dma); + aml_dma_linux_par_destroy(&dma); aml_area_munmap(&aml_area_linux, dst, TILESIZE*_SC_PAGE_SIZE*NBTILES); aml_area_munmap(&aml_area_linux, src, TILESIZE*_SC_PAGE_SIZE*NBTILES); - aml_tiling_1d_fini(&tiling); + aml_tiling_1d_destroy(&tiling); aml_finalize(); return 0; diff --git a/tests/dma/test_dma_linux_seq.c b/tests/dma/test_dma_linux_seq.c index 563910e3439165a3994201bb23f9afbd57c9b37a..5ca8827bfdfc466f06e64d1b586433a00f0d0b28 100644 --- a/tests/dma/test_dma_linux_seq.c +++ b/tests/dma/test_dma_linux_seq.c @@ -19,22 +19,18 @@ int main(int argc, char *argv[]) { - AML_TILING_1D_DECL(tiling); - AML_DMA_LINUX_SEQ_DECL(dma); - struct aml_bitmap nodemask; + struct aml_tiling *tiling; + struct aml_dma *dma; void *dst, *src; /* library initialization */ aml_init(&argc, &argv); /* initialize all the supporting struct */ - assert(!aml_tiling_1d_init(&tiling, TILESIZE*_SC_PAGE_SIZE, - TILESIZE*_SC_PAGE_SIZE*NBTILES)); - aml_bitmap_zero(&nodemask); - aml_bitmap_set(&nodemask, 0); - + assert(!aml_tiling_1d_create(&tiling, TILESIZE*_SC_PAGE_SIZE, + TILESIZE*_SC_PAGE_SIZE*NBTILES)); size_t maxrequests = NBTILES; - assert(!aml_dma_linux_seq_init(&dma, maxrequests)); + assert(!aml_dma_linux_seq_create(&dma, maxrequests)); /* allocate some memory */ src = aml_area_mmap(&aml_area_linux, NULL, TILESIZE*_SC_PAGE_SIZE*NBTILES); @@ -47,15 +43,15 @@ int main(int argc, char *argv[]) /* move some stuff by copy */ for(int i = 0; i < NBTILES; i++) - aml_dma_copy(&dma, &tiling, dst, i, &tiling, src, i); + aml_dma_copy(dma, tiling, dst, i, tiling, src, i); assert(!memcmp(src, dst, TILESIZE*_SC_PAGE_SIZE*NBTILES)); /* delete everything */ - aml_dma_linux_seq_fini(&dma); + aml_dma_linux_seq_destroy(&dma); aml_area_munmap(&aml_area_linux, dst, TILESIZE*_SC_PAGE_SIZE*NBTILES); aml_area_munmap(&aml_area_linux, src, TILESIZE*_SC_PAGE_SIZE*NBTILES); - aml_tiling_1d_fini(&tiling); + aml_tiling_1d_destroy(&tiling); aml_finalize(); return 0; diff --git a/tests/scratch/test_scratch_par.c b/tests/scratch/test_scratch_par.c index 1f186a60ddc7dc23b9919e440d2abb5d5006902e..bf5860d169eb1179ce2398f198e6725358876304 100644 --- a/tests/scratch/test_scratch_par.c +++ b/tests/scratch/test_scratch_par.c @@ -20,23 +20,20 @@ int main(int argc, char *argv[]) { - AML_TILING_1D_DECL(tiling); - AML_DMA_LINUX_SEQ_DECL(dma); - AML_SCRATCH_PAR_DECL(scratch); - struct aml_bitmap nodemask; + struct aml_tiling *tiling; + struct aml_dma *dma; + struct aml_scratch *scratch; void *dst, *src; /* library initialization */ aml_init(&argc, &argv); /* initialize all the supporting struct */ - assert(!aml_tiling_1d_init(&tiling, TILESIZE*_SC_PAGE_SIZE, - TILESIZE*_SC_PAGE_SIZE*NBTILES)); - aml_bitmap_zero(&nodemask); - aml_bitmap_set(&nodemask, 0); + assert(!aml_tiling_1d_create(&tiling, TILESIZE*_SC_PAGE_SIZE, + TILESIZE*_SC_PAGE_SIZE*NBTILES)); size_t maxrequests = NBTILES; - assert(!aml_dma_linux_seq_init(&dma, maxrequests)); + assert(!aml_dma_linux_seq_create(&dma, maxrequests)); /* allocate some memory */ src = aml_area_mmap(&aml_area_linux, NULL, TILESIZE*_SC_PAGE_SIZE*NBTILES); @@ -45,37 +42,37 @@ int main(int argc, char *argv[]) memset(src, 42, TILESIZE*_SC_PAGE_SIZE*NBTILES); /* create scratchpad */ - assert(!aml_scratch_par_init(&scratch, &aml_area_linux, &aml_area_linux, &dma, &tiling, - (size_t)NBTILES, (size_t)NBTILES)); - dst = aml_scratch_baseptr(&scratch); + assert(!aml_scratch_par_create(&scratch, &aml_area_linux, &aml_area_linux, dma, tiling, + (size_t)NBTILES, (size_t)NBTILES)); + dst = aml_scratch_baseptr(scratch); /* move some stuff */ for(int i = 0; i < NBTILES; i++) { int di, si; void *dp, *sp; - aml_scratch_pull(&scratch, dst, &di, src, i); + aml_scratch_pull(scratch, dst, &di, src, i); - dp = aml_tiling_tilestart(&tiling, dst, di); - sp = aml_tiling_tilestart(&tiling, src, i); + dp = aml_tiling_tilestart(tiling, dst, di); + sp = aml_tiling_tilestart(tiling, src, i); assert(!memcmp(sp, dp, TILESIZE*_SC_PAGE_SIZE)); memset(dp, 33, TILESIZE*_SC_PAGE_SIZE); - aml_scratch_push(&scratch, src, &si, dst, di); + aml_scratch_push(scratch, src, &si, dst, di); assert(si == i); - sp = aml_tiling_tilestart(&tiling, src, si); + sp = aml_tiling_tilestart(tiling, src, si); assert(!memcmp(sp, dp, TILESIZE*_SC_PAGE_SIZE)); } /* delete everything */ - aml_scratch_par_fini(&scratch); - aml_dma_linux_seq_fini(&dma); + aml_scratch_par_destroy(&scratch); + aml_dma_linux_seq_destroy(&dma); aml_area_munmap(&aml_area_linux, dst, TILESIZE*_SC_PAGE_SIZE*NBTILES); aml_area_munmap(&aml_area_linux, src, TILESIZE*_SC_PAGE_SIZE*NBTILES); - aml_tiling_1d_fini(&tiling); + aml_tiling_1d_destroy(&tiling); aml_finalize(); return 0; diff --git a/tests/scratch/test_scratch_seq.c b/tests/scratch/test_scratch_seq.c index aed036b00e70d3cde1364fa939829d255bd50f2b..2f6d4bd1168295cb93351e021bbb726aa1f91987 100644 --- a/tests/scratch/test_scratch_seq.c +++ b/tests/scratch/test_scratch_seq.c @@ -20,24 +20,21 @@ int main(int argc, char *argv[]) { - AML_TILING_1D_DECL(tiling); - AML_DMA_LINUX_PAR_DECL(dma); - AML_SCRATCH_SEQ_DECL(scratch); - struct aml_bitmap nodemask; + struct aml_tiling *tiling; + struct aml_dma *dma; + struct aml_scratch *scratch; void *dst, *src; /* library initialization */ aml_init(&argc, &argv); /* initialize all the supporting struct */ - assert(!aml_tiling_1d_init(&tiling, TILESIZE*_SC_PAGE_SIZE, - TILESIZE*_SC_PAGE_SIZE*NBTILES)); - aml_bitmap_zero(&nodemask); - aml_bitmap_set(&nodemask, 0); + assert(!aml_tiling_1d_create(&tiling, TILESIZE*_SC_PAGE_SIZE, + TILESIZE*_SC_PAGE_SIZE*NBTILES)); size_t maxrequests = NBTILES; size_t maxthreads = 4; - assert(!aml_dma_linux_par_init(&dma, maxrequests, maxthreads)); + assert(!aml_dma_linux_par_create(&dma, maxrequests, maxthreads)); /* allocate some memory */ src = aml_area_mmap(&aml_area_linux, NULL, TILESIZE*_SC_PAGE_SIZE*NBTILES); @@ -46,37 +43,37 @@ int main(int argc, char *argv[]) memset(src, 42, TILESIZE*_SC_PAGE_SIZE*NBTILES); /* create scratchpad */ - assert(!aml_scratch_seq_init(&scratch, &aml_area_linux, &aml_area_linux, &dma, &tiling, + assert(!aml_scratch_seq_create(&scratch, &aml_area_linux, &aml_area_linux, dma, tiling, (size_t)NBTILES, (size_t)NBTILES)); - dst = aml_scratch_baseptr(&scratch); + dst = aml_scratch_baseptr(scratch); /* move some stuff */ for(int i = 0; i < NBTILES; i++) { int di, si; void *dp, *sp; - aml_scratch_pull(&scratch, dst, &di, src, i); + aml_scratch_pull(scratch, dst, &di, src, i); - dp = aml_tiling_tilestart(&tiling, dst, di); - sp = aml_tiling_tilestart(&tiling, src, i); + dp = aml_tiling_tilestart(tiling, dst, di); + sp = aml_tiling_tilestart(tiling, src, i); assert(!memcmp(sp, dp, TILESIZE*_SC_PAGE_SIZE)); memset(dp, 33, TILESIZE*_SC_PAGE_SIZE); - aml_scratch_push(&scratch, src, &si, dst, di); + aml_scratch_push(scratch, src, &si, dst, di); assert(si == i); - sp = aml_tiling_tilestart(&tiling, src, si); + sp = aml_tiling_tilestart(tiling, src, si); assert(!memcmp(sp, dp, TILESIZE*_SC_PAGE_SIZE)); } /* delete everything */ - aml_scratch_seq_fini(&scratch); - aml_dma_linux_par_fini(&dma); + aml_scratch_seq_destroy(&scratch); + aml_dma_linux_par_destroy(&dma); aml_area_munmap(&aml_area_linux, dst, TILESIZE*_SC_PAGE_SIZE*NBTILES); aml_area_munmap(&aml_area_linux, src, TILESIZE*_SC_PAGE_SIZE*NBTILES); - aml_tiling_1d_fini(&tiling); + aml_tiling_1d_destroy(&tiling); aml_finalize(); return 0; diff --git a/tests/tiling/test_tiling.c b/tests/tiling/test_tiling.c index 957876b60b4f937613635c0de282eb7a88be9a58..2d7a082d3a65b6a4e4d31326344a3fbbb21ea174 100644 --- a/tests/tiling/test_tiling.c +++ b/tests/tiling/test_tiling.c @@ -44,33 +44,24 @@ int doit(struct aml_tiling *t, struct aml_tiling_iterator *it) int main(int argc, char *argv[]) { struct aml_tiling *a; - AML_TILING_1D_DECL(b); - - struct aml_tiling_iterator *ita; - AML_TILING_ITERATOR_1D_DECL(itb); + struct aml_tiling_iterator *it; /* library initialization */ aml_init(&argc, &argv); /* initialize the tilings */ aml_tiling_1d_create(&a, TILESIZE, TILESIZE*NBTILES); - aml_tiling_1d_init(&b, TILESIZE, TILESIZE*NBTILES); /* initialize the iterators */ - aml_tiling_create_iterator(a, &ita, 0); - aml_tiling_init_iterator(&b, &itb, 0); + aml_tiling_create_iterator(a, &it, 0); - doit(a, ita); - doit(&b, &itb); + doit(a, it); /* delete the iterators */ - aml_tiling_destroy_iterator(a, &ita); - aml_tiling_fini_iterator(&b, &itb); - + aml_tiling_destroy_iterator(a, &it); /* delete the tilings */ aml_tiling_1d_destroy(&a); - aml_tiling_1d_fini(&b); aml_finalize(); return 0; diff --git a/tests/tiling/test_tiling_2d.c b/tests/tiling/test_tiling_2d.c index c29e3bc750b646f78bbf029eb7a5bbfb53633523..075f8ea8be60c8288e3ec903f9c772e269660e45 100644 --- a/tests/tiling/test_tiling_2d.c +++ b/tests/tiling/test_tiling_2d.c @@ -17,10 +17,11 @@ int main(int argc, char *argv[]) { - AML_TILING_2D_ROWMAJOR_DECL(trm); - AML_TILING_2D_ROWMAJOR_DECL(trt); - AML_TILING_2D_COLMAJOR_DECL(tcm); - AML_TILING_2D_COLMAJOR_DECL(tct); + struct aml_tiling *trm; + struct aml_tiling *trt; + struct aml_tiling *tcm; + struct aml_tiling *tct; + /* Matrices used for checks: * - rowm: stored in row-major, numbered in memory order @@ -64,19 +65,19 @@ int main(int argc, char *argv[]) memcpy(colt, rowt, N*M*sizeof(int)); /* initialize the tilings */ - aml_tiling_2d_init(&trm, AML_TILING_TYPE_2D_ROWMAJOR, - sizeof(int), N*M*sizeof(int), N, M); - aml_tiling_2d_init(&trt, AML_TILING_TYPE_2D_ROWMAJOR, - sizeof(int), N*M*sizeof(int), M, N); - aml_tiling_2d_init(&tcm, AML_TILING_TYPE_2D_COLMAJOR, - sizeof(int), N*M*sizeof(int), M, N); - aml_tiling_2d_init(&tct, AML_TILING_TYPE_2D_COLMAJOR, - sizeof(int), N*M*sizeof(int), N, M); + aml_tiling_2d_create(&trm, AML_TILING_TYPE_2D_ROWMAJOR, + sizeof(int), N*M*sizeof(int), N, M); + aml_tiling_2d_create(&trt, AML_TILING_TYPE_2D_ROWMAJOR, + sizeof(int), N*M*sizeof(int), M, N); + aml_tiling_2d_create(&tcm, AML_TILING_TYPE_2D_COLMAJOR, + sizeof(int), N*M*sizeof(int), M, N); + aml_tiling_2d_create(&tct, AML_TILING_TYPE_2D_COLMAJOR, + sizeof(int), N*M*sizeof(int), N, M); size_t ndims[2]; - aml_tiling_ndims(&trm, &ndims[0], &ndims[1]); + aml_tiling_ndims(trm, &ndims[0], &ndims[1]); assert(ndims[0] == N && ndims[1] == M); - aml_tiling_ndims(&tcm, &ndims[0], &ndims[1]); + aml_tiling_ndims(tcm, &ndims[0], &ndims[1]); assert(ndims[0] == M && ndims[1] == N); /* check that the tilings gives me the right ids */ @@ -84,8 +85,8 @@ int main(int argc, char *argv[]) for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) { - int irow = aml_tiling_tileid(&trm, i, j); - int icol = aml_tiling_tileid(&tcm, j, i); + int irow = aml_tiling_tileid(trm, i, j); + int icol = aml_tiling_tileid(tcm, j, i); assert(irow == icol && irow == num); num++; } @@ -95,10 +96,10 @@ int main(int argc, char *argv[]) for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) { - int irow = aml_tiling_tileid(&trm, i, j); - int icol = aml_tiling_tileid(&tcm, j, i); - int *rm = aml_tiling_tilestart(&trm, &rowm, irow); - int *cm = aml_tiling_tilestart(&tcm, &colm, icol); + int irow = aml_tiling_tileid(trm, i, j); + int icol = aml_tiling_tileid(tcm, j, i); + int *rm = aml_tiling_tilestart(trm, &rowm, irow); + int *cm = aml_tiling_tilestart(tcm, &colm, icol); assert(*rm == num && *cm == num); num++; } @@ -108,10 +109,10 @@ int main(int argc, char *argv[]) for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) { - int icm = aml_tiling_tileid(&tcm, j, i); - int *cm = aml_tiling_tilestart(&tcm, &rowm, icm); - int irt = aml_tiling_tileid(&trt, j, i); - int *rt = aml_tiling_tilestart(&trt, &rowt, irt); + int icm = aml_tiling_tileid(tcm, j, i); + int *cm = aml_tiling_tilestart(tcm, &rowm, icm); + int irt = aml_tiling_tileid(trt, j, i); + int *rt = aml_tiling_tilestart(trt, &rowt, irt); assert(*cm == *rt); } @@ -120,19 +121,19 @@ int main(int argc, char *argv[]) for(int i = 0; i < M; i++) for(int j = 0; j < N; j++) { - int irm = aml_tiling_tileid(&trm, j, i); - int *rm = aml_tiling_tilestart(&trm, &colm, irm); - int ict = aml_tiling_tileid(&tct, j, i); - int *ct = aml_tiling_tilestart(&tct, &rowt, ict); + int irm = aml_tiling_tileid(trm, j, i); + int *rm = aml_tiling_tilestart(trm, &colm, irm); + int ict = aml_tiling_tileid(tct, j, i); + int *ct = aml_tiling_tilestart(tct, &rowt, ict); assert(*rm == *ct); } /* delete the tilings */ - aml_tiling_2d_fini(&trm); - aml_tiling_2d_fini(&trt); - aml_tiling_2d_fini(&tcm); - aml_tiling_2d_fini(&tct); + aml_tiling_2d_destroy(&trm); + aml_tiling_2d_destroy(&trt); + aml_tiling_2d_destroy(&tcm); + aml_tiling_2d_destroy(&tct); aml_finalize(); return 0; } diff --git a/tests/utils/test_vector.c b/tests/utils/test_vector.c index 01b0764f96459c3dbd845f7f4f33abff7c4afbea..d64e6e9924df8bbf3ea60645de48c6efe3a31cc6 100644 --- a/tests/utils/test_vector.c +++ b/tests/utils/test_vector.c @@ -13,7 +13,7 @@ int main(void) { - struct aml_vector v; + struct aml_vector *v; /* no need for library initialization */ ; @@ -23,27 +23,27 @@ int main(void) unsigned long unused; int key; }; - assert(!aml_vector_init(&v, 1, sizeof(struct test), + assert(!aml_vector_create(&v, 1, sizeof(struct test), offsetof(struct test, key), -1)); /* assert the size */ - assert(aml_vector_size(&v) == 1); + assert(aml_vector_size(v) == 1); /* add an element and look for some */ - struct test *e = aml_vector_get(&v, 0); + struct test *e = aml_vector_get(v, 0); assert(e != NULL); e->unused = 42; e->key = 24; - assert(aml_vector_find(&v, 24) == 0); - assert(aml_vector_find(&v, 42) == -1); + assert(aml_vector_find(v, 24) == 0); + assert(aml_vector_find(v, 42) == -1); /* add a second element, trigger a resize, and check it */ - struct test *f = aml_vector_add(&v); + struct test *f = aml_vector_add(v); assert(f != NULL && f->key == -1); - assert(aml_vector_find(&v, 42) == -1); - assert(aml_vector_find(&v, -1) == 1); - assert(aml_vector_size(&v) == 2); + assert(aml_vector_find(v, 42) == -1); + assert(aml_vector_find(v, -1) == 1); + assert(aml_vector_size(v) == 2); - aml_vector_fini(&v); + aml_vector_destroy(&v); return 0; }