Commit 1f72931215afbe8eec9819db9acf3c12c0300dfb

Authored by Jim Plank
1 parent 8907dee8
Exists in master and in 1 other branch v2

Formatting.

Showing 3 changed files with 6 additions and 423 deletions   Show diff stats
@@ -12,8 +12,6 @@ See https://bitbucket.org/jimplank/gf-complete for GF-Complete. @@ -12,8 +12,6 @@ See https://bitbucket.org/jimplank/gf-complete for GF-Complete.
12 12
13 NOTE: You must have GF-Complete installed in order to use Jerasure 2.0. 13 NOTE: You must have GF-Complete installed in order to use Jerasure 2.0.
14 14
15 -Custom usage of GF-Complete is explained in this file (see below).  
16 -  
17 There are two directories of source code: 15 There are two directories of source code:
18 16
19 The src directory contains the jerasure code. 17 The src directory contains the jerasure code.
@@ -24,18 +22,13 @@ The makefile assumes that Examples is a subdirectory of the home directory. @@ -24,18 +22,13 @@ The makefile assumes that Examples is a subdirectory of the home directory.
24 Installing: 22 Installing:
25 23
26 1.) Install GF-Complete 24 1.) Install GF-Complete
27 -  
28 2.) ./configure 25 2.) ./configure
29 -  
30 3.) make 26 3.) make
31 -  
32 -4.) make install 27 +4.) sudo make install
33 28
34 This will install the examples under PREFIX/bin, the library under PREFIX/lib 29 This will install the examples under PREFIX/bin, the library under PREFIX/lib
35 and the header files under PREFIX/include 30 and the header files under PREFIX/include
36 31
37 -See individual source files to determine what the examples do.  
38 -  
39 Inclusion of GF-Complete: 32 Inclusion of GF-Complete:
40 33
41 As long as GF-Complete is installed, Jerasure 2.0 can be used just as previous 34 As long as GF-Complete is installed, Jerasure 2.0 can be used just as previous
@@ -43,136 +36,4 @@ versions. There is no need to define custom Galois Fields. Jerasure will @@ -43,136 +36,4 @@ versions. There is no need to define custom Galois Fields. Jerasure will
43 determine the default field to use, if one is not specified. 36 determine the default field to use, if one is not specified.
44 37
45 If you would like to explore a using a different Galois Field implementation, 38 If you would like to explore a using a different Galois Field implementation,
46 -you can dynamically set the backend GF for a given word-size (w).  
47 -  
48 -The new galois.c and galois.h export the following functions to be used by applications  
49 -for dynamically setting the back-end GF:  
50 -  
51 -1.) galois_change_technique  
52 -  
53 - Function signature:  
54 -  
55 - void galois_change_technique(gf_t *gf, int w);  
56 -  
57 - This is the recommended way for you to change techniques.  
58 -  
59 - This function will take a pointer to a Galois field structure and set it as the  
60 - current backend for all operations in GF(2^w). Note that you must specify 'w'  
61 - here, since the internal GF structure is mostly opaque to Jerasure. Be sure to  
62 - change the technique with the correct structure and word-size.  
63 -  
64 - There are a few ways to get a pointer to a gf_t structure: GF-Complete gives three  
65 - primitives for this -- create_gf_from_argv(), gf_init_easy() and gf_init_hard().  
66 - Please read the documentation on GF-Complete for how these work. By far, the  
67 - most powerful and easy is create_gf_from_argv(), which parses an argv-style  
68 - string. Otherwise, the most flexible is gf_init_hard().  
69 -  
70 - In galois.c/galois.h, we have defined galois_init_field(), which is pretty much  
71 - identical to gf_init_hard(), except it performs memory allocation with malloc(),  
72 - and galois_init_composite_field(), which facilitates creating composite fields.  
73 -  
74 - These are described below, but once again, we recommend using create_gf_from_argv()  
75 - or gf_init_hard() if you want to change your Galois field.  
76 -  
77 -2.) galois_init_field  
78 -  
79 - Function signature:  
80 -  
81 - gf_t* galois_init_field(int w,  
82 - int mult_type,  
83 - int region_type,  
84 - int divide_type,  
85 - uint64_t prim_poly,  
86 - int arg1,  
87 - int arg2);  
88 -  
89 - This is a helper function that will initialize a Galois field. See the GF-Complete  
90 - documentation for more info on what the arguments mean. Here is a brief description  
91 - of the arguments:  
92 -  
93 - mult_type can be any *one* of the following:  
94 -  
95 - GF_MULT_DEFAULT  
96 - GF_MULT_SHIFT  
97 - GF_MULT_CARRY_FREE  
98 - GF_MULT_GROUP  
99 - GF_MULT_BYTWO_p  
100 - GF_MULT_BYTWO_b  
101 - GF_MULT_TABLE  
102 - GF_MULT_LOG_TABLE  
103 - GF_MULT_LOG_ZERO  
104 - GF_MULT_LOG_ZERO_EXT  
105 - GF_MULT_SPLIT_TABLE  
106 -  
107 - region_type can be a combination of the following (some combinations will not  
108 - be valid):  
109 -  
110 - GF_REGION_DEFAULT  
111 - GF_REGION_DOUBLE_TABLE  
112 - GF_REGION_QUAD_TABLE  
113 - GF_REGION_LAZY  
114 - GF_REGION_SSE  
115 - GF_REGION_NOSSE  
116 - GF_REGION_ALTMAP  
117 - GF_REGION_CAUCHY  
118 -  
119 - divide_type can be one of the following:  
120 -  
121 - GF_DIVIDE_DEFAULT  
122 - GF_DIVIDE_MATRIX  
123 - GF_DIVIDE_EUCLID  
124 -  
125 - prim_poly is the field-defining primitive polynomial  
126 -  
127 - arg1 and arg2 are special arguments usually used for defining SPLIT and GROUP  
128 - operations  
129 -  
130 -3.) galois_init_composite_field  
131 -  
132 - Function signature:  
133 -  
134 - gf_t* galois_init_composite_field(int w,  
135 - int region_type,  
136 - int divide_type,  
137 - int degree,  
138 - gf_t* base_gf);  
139 -  
140 - This is a helper function designed to make creating Composite fields easier. All you  
141 - need to do is hand it w, region mult type, divide type, degree and a pointer to a base  
142 - field. Note that the base_gf must have degree w/degree in order for this to work.  
143 - For example, if we create a GF using:  
144 -  
145 - galois_init_composite_field(32, GF_REGION_DEFAULT, GF_DIVIDE_DEFAULT, 2, base_gf);  
146 -  
147 - Then base_gf must have w=16.  
148 -  
149 -For more information on how to change the backing fields for Jerasure, please refer to  
150 -  
151 - 1.) Examples/reed_sol_test_gf.c: Runs basic tests for Reed-Solomon given args  
152 - for a backing GF (uses create_gf_from_argv to get gf_t pointer)  
153 -  
154 - 2.) Examples/reed_sol_time_gf.c: Runs more thorough timing and validation tests  
155 - for a backing GF (uses create_gf_from_argv to get gf_t pointer)  
156 -  
157 -Performance:  
158 -  
159 -There are two performance-based test scripts: time_all_gfs_argv_init.sh and  
160 -time_all_gfs_hard_init.sh. Both scripts run the same tests, but initialize the  
161 -underlying GF fields in different ways (*argv* uses reed_sol_time_gf and *hard*  
162 -uses reed_sol_hard_time_gf.c).  
163 -  
164 -You can run 'time_all_gfs_argv_init.sh' to time *all* possible GF  
165 -implementations on your computer. This script requires the 'gf_methods'  
166 -utility from GF-Complete to be in your PATH.  
167 -  
168 -time_all_gfs_argv_init.sh was run on a MacBook Air and the distilled numbers  
169 -are given in ./PERF.txt. The results are sorted by encoding throughput. The  
170 -format of each entry reflects the arguments given to reed_sol_time_gf. For example,  
171 -the test run of  
172 -  
173 -'Examples/reed_sol_time_gf 12 3 8 128 65536 -m SPLIT 8 4 -r SSE'  
174 -  
175 -is recorded as this in PERF.txt:  
176 -  
177 -_12_3_8_128_65536_-m_SPLIT_8_4_-r_SSE_- 2813.34  
178 - 39 +please see the manual.
@@ -12,8 +12,6 @@ See https://bitbucket.org/jimplank/gf-complete for GF-Complete. @@ -12,8 +12,6 @@ See https://bitbucket.org/jimplank/gf-complete for GF-Complete.
12 12
13 NOTE: You must have GF-Complete installed in order to use Jerasure 2.0. 13 NOTE: You must have GF-Complete installed in order to use Jerasure 2.0.
14 14
15 -Custom usage of GF-Complete is explained in this file (see below).  
16 -  
17 There are two directories of source code: 15 There are two directories of source code:
18 16
19 The src directory contains the jerasure code. 17 The src directory contains the jerasure code.
@@ -24,18 +22,13 @@ The makefile assumes that Examples is a subdirectory of the home directory. @@ -24,18 +22,13 @@ The makefile assumes that Examples is a subdirectory of the home directory.
24 Installing: 22 Installing:
25 23
26 1.) Install GF-Complete 24 1.) Install GF-Complete
27 -  
28 2.) ./configure 25 2.) ./configure
29 -  
30 3.) make 26 3.) make
31 -  
32 -4.) make install 27 +4.) sudo make install
33 28
34 This will install the examples under PREFIX/bin, the library under PREFIX/lib 29 This will install the examples under PREFIX/bin, the library under PREFIX/lib
35 and the header files under PREFIX/include 30 and the header files under PREFIX/include
36 31
37 -See individual source files to determine what the examples do.  
38 -  
39 Inclusion of GF-Complete: 32 Inclusion of GF-Complete:
40 33
41 As long as GF-Complete is installed, Jerasure 2.0 can be used just as previous 34 As long as GF-Complete is installed, Jerasure 2.0 can be used just as previous
@@ -43,136 +36,4 @@ versions. There is no need to define custom Galois Fields. Jerasure will @@ -43,136 +36,4 @@ versions. There is no need to define custom Galois Fields. Jerasure will
43 determine the default field to use, if one is not specified. 36 determine the default field to use, if one is not specified.
44 37
45 If you would like to explore a using a different Galois Field implementation, 38 If you would like to explore a using a different Galois Field implementation,
46 -you can dynamically set the backend GF for a given word-size (w).  
47 -  
48 -The new galois.c and galois.h export the following functions to be used by applications  
49 -for dynamically setting the back-end GF:  
50 -  
51 -1.) galois_change_technique  
52 -  
53 - Function signature:  
54 -  
55 - void galois_change_technique(gf_t *gf, int w);  
56 -  
57 - This is the recommended way for you to change techniques.  
58 -  
59 - This function will take a pointer to a Galois field structure and set it as the  
60 - current backend for all operations in GF(2^w). Note that you must specify 'w'  
61 - here, since the internal GF structure is mostly opaque to Jerasure. Be sure to  
62 - change the technique with the correct structure and word-size.  
63 -  
64 - There are a few ways to get a pointer to a gf_t structure: GF-Complete gives three  
65 - primitives for this -- create_gf_from_argv(), gf_init_easy() and gf_init_hard().  
66 - Please read the documentation on GF-Complete for how these work. By far, the  
67 - most powerful and easy is create_gf_from_argv(), which parses an argv-style  
68 - string. Otherwise, the most flexible is gf_init_hard().  
69 -  
70 - In galois.c/galois.h, we have defined galois_init_field(), which is pretty much  
71 - identical to gf_init_hard(), except it performs memory allocation with malloc(),  
72 - and galois_init_composite_field(), which facilitates creating composite fields.  
73 -  
74 - These are described below, but once again, we recommend using create_gf_from_argv()  
75 - or gf_init_hard() if you want to change your Galois field.  
76 -  
77 -2.) galois_init_field  
78 -  
79 - Function signature:  
80 -  
81 - gf_t* galois_init_field(int w,  
82 - int mult_type,  
83 - int region_type,  
84 - int divide_type,  
85 - uint64_t prim_poly,  
86 - int arg1,  
87 - int arg2);  
88 -  
89 - This is a helper function that will initialize a Galois field. See the GF-Complete  
90 - documentation for more info on what the arguments mean. Here is a brief description  
91 - of the arguments:  
92 -  
93 - mult_type can be any *one* of the following:  
94 -  
95 - GF_MULT_DEFAULT  
96 - GF_MULT_SHIFT  
97 - GF_MULT_CARRY_FREE  
98 - GF_MULT_GROUP  
99 - GF_MULT_BYTWO_p  
100 - GF_MULT_BYTWO_b  
101 - GF_MULT_TABLE  
102 - GF_MULT_LOG_TABLE  
103 - GF_MULT_LOG_ZERO  
104 - GF_MULT_LOG_ZERO_EXT  
105 - GF_MULT_SPLIT_TABLE  
106 -  
107 - region_type can be a combination of the following (some combinations will not  
108 - be valid):  
109 -  
110 - GF_REGION_DEFAULT  
111 - GF_REGION_DOUBLE_TABLE  
112 - GF_REGION_QUAD_TABLE  
113 - GF_REGION_LAZY  
114 - GF_REGION_SSE  
115 - GF_REGION_NOSSE  
116 - GF_REGION_ALTMAP  
117 - GF_REGION_CAUCHY  
118 -  
119 - divide_type can be one of the following:  
120 -  
121 - GF_DIVIDE_DEFAULT  
122 - GF_DIVIDE_MATRIX  
123 - GF_DIVIDE_EUCLID  
124 -  
125 - prim_poly is the field-defining primitive polynomial  
126 -  
127 - arg1 and arg2 are special arguments usually used for defining SPLIT and GROUP  
128 - operations  
129 -  
130 -3.) galois_init_composite_field  
131 -  
132 - Function signature:  
133 -  
134 - gf_t* galois_init_composite_field(int w,  
135 - int region_type,  
136 - int divide_type,  
137 - int degree,  
138 - gf_t* base_gf);  
139 -  
140 - This is a helper function designed to make creating Composite fields easier. All you  
141 - need to do is hand it w, region mult type, divide type, degree and a pointer to a base  
142 - field. Note that the base_gf must have degree w/degree in order for this to work.  
143 - For example, if we create a GF using:  
144 -  
145 - galois_init_composite_field(32, GF_REGION_DEFAULT, GF_DIVIDE_DEFAULT, 2, base_gf);  
146 -  
147 - Then base_gf must have w=16.  
148 -  
149 -For more information on how to change the backing fields for Jerasure, please refer to  
150 -  
151 - 1.) Examples/reed_sol_test_gf.c: Runs basic tests for Reed-Solomon given args  
152 - for a backing GF (uses create_gf_from_argv to get gf_t pointer)  
153 -  
154 - 2.) Examples/reed_sol_time_gf.c: Runs more thorough timing and validation tests  
155 - for a backing GF (uses create_gf_from_argv to get gf_t pointer)  
156 -  
157 -Performance:  
158 -  
159 -There are two performance-based test scripts: time_all_gfs_argv_init.sh and  
160 -time_all_gfs_hard_init.sh. Both scripts run the same tests, but initialize the  
161 -underlying GF fields in different ways (*argv* uses reed_sol_time_gf and *hard*  
162 -uses reed_sol_hard_time_gf.c).  
163 -  
164 -You can run 'time_all_gfs_argv_init.sh' to time *all* possible GF  
165 -implementations on your computer. This script requires the 'gf_methods'  
166 -utility from GF-Complete to be in your PATH.  
167 -  
168 -time_all_gfs_argv_init.sh was run on a MacBook Air and the distilled numbers  
169 -are given in ./PERF.txt. The results are sorted by encoding throughput. The  
170 -format of each entry reflects the arguments given to reed_sol_time_gf. For example,  
171 -the test run of  
172 -  
173 -'Examples/reed_sol_time_gf 12 3 8 128 65536 -m SPLIT 8 4 -r SSE'  
174 -  
175 -is recorded as this in PERF.txt:  
176 -  
177 -_12_3_8_128_65536_-m_SPLIT_8_4_-r_SSE_- 2813.34  
178 - 39 +please see the manual.
@@ -12,8 +12,6 @@ See https://bitbucket.org/jimplank/gf-complete for GF-Complete. @@ -12,8 +12,6 @@ See https://bitbucket.org/jimplank/gf-complete for GF-Complete.
12 12
13 NOTE: You must have GF-Complete installed in order to use Jerasure 2.0. 13 NOTE: You must have GF-Complete installed in order to use Jerasure 2.0.
14 14
15 -Custom usage of GF-Complete is explained in this file (see below).  
16 -  
17 There are two directories of source code: 15 There are two directories of source code:
18 16
19 The src directory contains the jerasure code. 17 The src directory contains the jerasure code.
@@ -24,18 +22,13 @@ The makefile assumes that Examples is a subdirectory of the home directory. @@ -24,18 +22,13 @@ The makefile assumes that Examples is a subdirectory of the home directory.
24 Installing: 22 Installing:
25 23
26 1.) Install GF-Complete 24 1.) Install GF-Complete
27 -  
28 2.) ./configure 25 2.) ./configure
29 -  
30 3.) make 26 3.) make
31 -  
32 -4.) make install 27 +4.) sudo make install
33 28
34 This will install the examples under PREFIX/bin, the library under PREFIX/lib 29 This will install the examples under PREFIX/bin, the library under PREFIX/lib
35 and the header files under PREFIX/include 30 and the header files under PREFIX/include
36 31
37 -See individual source files to determine what the examples do.  
38 -  
39 Inclusion of GF-Complete: 32 Inclusion of GF-Complete:
40 33
41 As long as GF-Complete is installed, Jerasure 2.0 can be used just as previous 34 As long as GF-Complete is installed, Jerasure 2.0 can be used just as previous
@@ -43,136 +36,4 @@ versions. There is no need to define custom Galois Fields. Jerasure will @@ -43,136 +36,4 @@ versions. There is no need to define custom Galois Fields. Jerasure will
43 determine the default field to use, if one is not specified. 36 determine the default field to use, if one is not specified.
44 37
45 If you would like to explore a using a different Galois Field implementation, 38 If you would like to explore a using a different Galois Field implementation,
46 -you can dynamically set the backend GF for a given word-size (w).  
47 -  
48 -The new galois.c and galois.h export the following functions to be used by applications  
49 -for dynamically setting the back-end GF:  
50 -  
51 -1.) galois_change_technique  
52 -  
53 - Function signature:  
54 -  
55 - void galois_change_technique(gf_t *gf, int w);  
56 -  
57 - This is the recommended way for you to change techniques.  
58 -  
59 - This function will take a pointer to a Galois field structure and set it as the  
60 - current backend for all operations in GF(2^w). Note that you must specify 'w'  
61 - here, since the internal GF structure is mostly opaque to Jerasure. Be sure to  
62 - change the technique with the correct structure and word-size.  
63 -  
64 - There are a few ways to get a pointer to a gf_t structure: GF-Complete gives three  
65 - primitives for this -- create_gf_from_argv(), gf_init_easy() and gf_init_hard().  
66 - Please read the documentation on GF-Complete for how these work. By far, the  
67 - most powerful and easy is create_gf_from_argv(), which parses an argv-style  
68 - string. Otherwise, the most flexible is gf_init_hard().  
69 -  
70 - In galois.c/galois.h, we have defined galois_init_field(), which is pretty much  
71 - identical to gf_init_hard(), except it performs memory allocation with malloc(),  
72 - and galois_init_composite_field(), which facilitates creating composite fields.  
73 -  
74 - These are described below, but once again, we recommend using create_gf_from_argv()  
75 - or gf_init_hard() if you want to change your Galois field.  
76 -  
77 -2.) galois_init_field  
78 -  
79 - Function signature:  
80 -  
81 - gf_t* galois_init_field(int w,  
82 - int mult_type,  
83 - int region_type,  
84 - int divide_type,  
85 - uint64_t prim_poly,  
86 - int arg1,  
87 - int arg2);  
88 -  
89 - This is a helper function that will initialize a Galois field. See the GF-Complete  
90 - documentation for more info on what the arguments mean. Here is a brief description  
91 - of the arguments:  
92 -  
93 - mult_type can be any *one* of the following:  
94 -  
95 - GF_MULT_DEFAULT  
96 - GF_MULT_SHIFT  
97 - GF_MULT_CARRY_FREE  
98 - GF_MULT_GROUP  
99 - GF_MULT_BYTWO_p  
100 - GF_MULT_BYTWO_b  
101 - GF_MULT_TABLE  
102 - GF_MULT_LOG_TABLE  
103 - GF_MULT_LOG_ZERO  
104 - GF_MULT_LOG_ZERO_EXT  
105 - GF_MULT_SPLIT_TABLE  
106 -  
107 - region_type can be a combination of the following (some combinations will not  
108 - be valid):  
109 -  
110 - GF_REGION_DEFAULT  
111 - GF_REGION_DOUBLE_TABLE  
112 - GF_REGION_QUAD_TABLE  
113 - GF_REGION_LAZY  
114 - GF_REGION_SSE  
115 - GF_REGION_NOSSE  
116 - GF_REGION_ALTMAP  
117 - GF_REGION_CAUCHY  
118 -  
119 - divide_type can be one of the following:  
120 -  
121 - GF_DIVIDE_DEFAULT  
122 - GF_DIVIDE_MATRIX  
123 - GF_DIVIDE_EUCLID  
124 -  
125 - prim_poly is the field-defining primitive polynomial  
126 -  
127 - arg1 and arg2 are special arguments usually used for defining SPLIT and GROUP  
128 - operations  
129 -  
130 -3.) galois_init_composite_field  
131 -  
132 - Function signature:  
133 -  
134 - gf_t* galois_init_composite_field(int w,  
135 - int region_type,  
136 - int divide_type,  
137 - int degree,  
138 - gf_t* base_gf);  
139 -  
140 - This is a helper function designed to make creating Composite fields easier. All you  
141 - need to do is hand it w, region mult type, divide type, degree and a pointer to a base  
142 - field. Note that the base_gf must have degree w/degree in order for this to work.  
143 - For example, if we create a GF using:  
144 -  
145 - galois_init_composite_field(32, GF_REGION_DEFAULT, GF_DIVIDE_DEFAULT, 2, base_gf);  
146 -  
147 - Then base_gf must have w=16.  
148 -  
149 -For more information on how to change the backing fields for Jerasure, please refer to  
150 -  
151 - 1.) Examples/reed_sol_test_gf.c: Runs basic tests for Reed-Solomon given args  
152 - for a backing GF (uses create_gf_from_argv to get gf_t pointer)  
153 -  
154 - 2.) Examples/reed_sol_time_gf.c: Runs more thorough timing and validation tests  
155 - for a backing GF (uses create_gf_from_argv to get gf_t pointer)  
156 -  
157 -Performance:  
158 -  
159 -There are two performance-based test scripts: time_all_gfs_argv_init.sh and  
160 -time_all_gfs_hard_init.sh. Both scripts run the same tests, but initialize the  
161 -underlying GF fields in different ways (*argv* uses reed_sol_time_gf and *hard*  
162 -uses reed_sol_hard_time_gf.c).  
163 -  
164 -You can run 'time_all_gfs_argv_init.sh' to time *all* possible GF  
165 -implementations on your computer. This script requires the 'gf_methods'  
166 -utility from GF-Complete to be in your PATH.  
167 -  
168 -time_all_gfs_argv_init.sh was run on a MacBook Air and the distilled numbers  
169 -are given in ./PERF.txt. The results are sorted by encoding throughput. The  
170 -format of each entry reflects the arguments given to reed_sol_time_gf. For example,  
171 -the test run of  
172 -  
173 -'Examples/reed_sol_time_gf 12 3 8 128 65536 -m SPLIT 8 4 -r SSE'  
174 -  
175 -is recorded as this in PERF.txt:  
176 -  
177 -_12_3_8_128_65536_-m_SPLIT_8_4_-r_SSE_- 2813.34  
178 - 39 +please see the manual.