source: soft/giet_vm/applications/rosenfeld/include/mca.h @ 817

Last change on this file since 817 was 805, checked in by meunier, 9 years ago
  • Adding the parallel version of rosenfeld
File size: 2.4 KB
RevLine 
[805]1/* ------------- */
2/* --- MCA.h --- */
3/* ------------- */
4
5/*
6 * Copyright (c) 2016 Lionel Lacassagne, LIP6, UPMC, CNRS
7 * Init  : 2016/03/03
8 */
9
10// Multi/Many Cores Connected Component Computation en Analysis
11// extension of pixel-based and run-based algorithm to manycores with distributed memory
12
13#ifndef __MCA_H__
14#define __MCA_H__
15
16#include <user_lock.h>
17
18
19#ifdef __cplusplus
20#ifdef VERBOSE_PRAGMA
21#pragma message ("C++")
22#endif
23extern "C" {
24#endif
25
26user_lock_t print_lock;
27
28#define MCA_VERBOSE0(X) ({         \
29        lock_acquire(&print_lock); \
30        X;                         \
31        lock_release(&print_lock); \
32        })
33#define MCA_VERBOSE1(X) ({         \
34        lock_acquire(&print_lock); \
35        X;                         \
36        lock_release(&print_lock); \
37        })
38
39
40//#define MCA_VERBOSE2(X) X
41#define MCA_VERBOSE2(X)
42
43
44
45typedef struct sMCA {
46    int p, np;         // numero du processeur et nb total de processeurs
47   
48    uint8  ** X; // image source
49    uint32 ** E; // image d'etiquette 32 bits
50   
51    int width;
52    int height;
53   
54    int i0, i1;
55    int j0, j1;
56   
57    uint32 e0, e1; // indice pour chaque bande
58    uint32 ne; // indice max d'etiquettes utilise par bande
59
60    int alpha; // puissance de 2 >= a la taille d'un bloc
61    //uint32 *I;
62    uint32  *T; // table d'quivalence table (Rosenfeld) ou d'indices (Warp)
63    uint32 **D; // distributed table (instanciee dans chaque worker)
64   
65    //RegionStats *Stats;
66   
67    struct sMCA * mca;   // pointeur vers le maitre (pour les esclaves)
68    struct sMCA ** mcas; // tableau de pointeurs vers les workers
69} MCA;
70   
71void MCA_Error(char * msg);
72
73MCA * MCA_pConstructor_Empty(void);
74MCA * MCA_pDestructor(MCA * mca);
75
76void MCA_Set_ImageX(MCA * mca, uint8  ** X);
77void MCA_Set_ImageL(MCA * mca, uint32 ** E);
78
79void   MCA_Set_Size(MCA * mca, int width, int height);
80void   MCA_Set_NP(MCA * mca, int np);
81
82uint32 MCA_CalcMaxLabels(int connection, uint32 height, uint32 width);
83
84void MCA_Display_Parameters(MCA *mca);
85
86void MCA_Initialize(MCA * mca);
87void MCA_Finalize  (MCA * mca);
88
89
90// master to workers
91void MCA_Scatter_ImageX(MCA * mca);
92
93// workers to master
94void MCA_Gather_ImageL(MCA * mca);
95
96// CC run
97void MCA_Rosenfeld(MCA * mca);
98void MCA_MPar(MCA * mca);
99void MCA_Warp(MCA * mca);
100
101#ifdef __cplusplus
102}
103#endif
104
105#endif // __MCA_H__
106
Note: See TracBrowser for help on using the repository browser.