Changeset e99e43f for tests/heap.cfa
- Timestamp:
- Jan 10, 2019, 3:50:34 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- d97c3a4
- Parents:
- aeb8f70 (diff), 08222c7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - git-author:
- Aaron Moss <a3moss@…> (01/10/19 14:46:09)
- git-committer:
- Aaron Moss <a3moss@…> (01/10/19 15:50:34)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
tests/heap.cfa
raeb8f70 re99e43f 1 // 2 // Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo 3 // 4 // The contents of this file are covered under the licence agreement in the 5 // file "LICENCE" distributed with Cforall. 6 // 7 // heap.cfa -- 8 // 9 // Author : Peter A. Buhr 10 // Created On : Tue Nov 6 17:54:56 2018 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Dec 11 21:52:40 2018 13 // Update Count : 18 14 // 15 1 16 #include <thread.hfa> 2 #include <kernel.hfa> 3 #include <stdlib.hfa> 17 #include <kernel.hfa> // processor 18 #include <stdlib.hfa> // *allocs 4 19 #include <malloc.h> // malloc_* 5 20 … … 22 37 void main( Worker & ) { 23 38 enum { NoOfAllocs = 5000, NoOfMmaps = 10 }; 24 char * locns[NoOfAllocs];39 char * locns[NoOfAllocs]; 25 40 int i; 26 41 27 42 // check alloc/free 28 43 29 for ( int j = 0; j < 40; j += 1) {30 for ( i = 0; i < NoOfAllocs; i += 1) {44 for ( j; 40 ) { 45 for ( i; NoOfAllocs ) { 31 46 locns[i] = alloc( i ); 32 //sout | (void *)locns[i] | endl;33 for ( int k = 0; k < i; k += 1) locns[i][k] = '\345';34 } // for 35 //sout | (char *)sbrk(0) - start | " bytes" | endl;36 37 for ( i = 0; i < NoOfAllocs; i += 1) {38 //sout | (void *)locns[i] | endl;39 for ( int k = 0; k < i; k += 1) if ( locns[i][k] != '\345' ) abort( "new/delete corrupt storage1" );47 //sout | (void *)locns[i]; 48 for ( k; i ) locns[i][k] = '\345'; 49 } // for 50 //sout | (char *)sbrk(0) - start | " bytes"; 51 52 for ( i; NoOfAllocs ) { 53 //sout | (void *)locns[i]; 54 for ( k; i ) if ( locns[i][k] != '\345' ) abort( "new/delete corrupt storage1" ); 40 55 free( locns[i] ); 41 56 } // for 42 //sout | (char *)sbrk(0) - start | " bytes" | endl;43 44 for ( i = 0; i < NoOfAllocs; i += 1) {57 //sout | (char *)sbrk(0) - start | " bytes"; 58 59 for ( i; NoOfAllocs ) { 45 60 locns[i] = alloc( i ); 46 //sout | (void *)locns[i] | endl;47 for ( int k = 0; k < i; k += 1) locns[i][k] = '\345';48 } // for 49 for ( i = NoOfAllocs - 1; i >=0 ; i -= 1) {50 //sout | (void *)locns[i] | endl;51 for ( int k = 0; k < i; k += 1) if ( locns[i][k] != '\345' ) abort( "new/delete corrupt storage2" );61 //sout | (void *)locns[i]; 62 for ( k; i ) locns[i][k] = '\345'; 63 } // for 64 for ( i; NoOfAllocs - 1 -~= 0 ) { 65 //sout | (void *)locns[i]; 66 for ( k; i ) if ( locns[i][k] != '\345' ) abort( "new/delete corrupt storage2" ); 52 67 free( locns[i] ); 53 68 } // for … … 56 71 // check malloc/free (sbrk) 57 72 58 for ( i = 0; i < NoOfAllocs; i += 1) {73 for ( i; NoOfAllocs ) { 59 74 size_t s = (i + 1) * 20; 60 char * area = (char *)malloc( s );75 char * area = (char *)malloc( s ); 61 76 if ( area == 0 ) abort( "malloc/free out of memory" ); 62 77 area[0] = '\345'; area[s - 1] = '\345'; // fill first/last … … 65 80 } // for 66 81 67 for ( i = 0; i < NoOfAllocs; i += 1) {68 size_t s = i + 1; // +1 to make initialization simpler82 for ( i; NoOfAllocs ) { 83 size_t s = i + 1; // +1 to make initialization simpler 69 84 locns[i] = (char *)malloc( s ); 70 85 if ( locns[i] == 0 ) abort( "malloc/free out of memory" ); … … 72 87 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 73 88 } // for 74 for ( i = 0; i < NoOfAllocs; i += 1) {89 for ( i; NoOfAllocs ) { 75 90 size_t s = i + 1; 76 91 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || … … 81 96 // check malloc/free (mmap) 82 97 83 for ( i = 0; i < NoOfMmaps; i += 1) {84 size_t s = i + default_mmap_start(); 85 char * area = (char *)malloc( s );98 for ( i; NoOfMmaps ) { 99 size_t s = i + default_mmap_start(); // cross over point 100 char * area = (char *)malloc( s ); 86 101 if ( area == 0 ) abort( "malloc/free out of memory" ); 87 102 area[0] = '\345'; area[s - 1] = '\345'; // fill first/last … … 90 105 } // for 91 106 92 for ( i = 0; i < NoOfMmaps; i += 1) {93 size_t s = i + default_mmap_start(); 107 for ( i; NoOfMmaps ) { 108 size_t s = i + default_mmap_start(); // cross over point 94 109 locns[i] = (char *)malloc( s ); 95 110 if ( locns[i] == 0 ) abort( "malloc/free out of memory" ); … … 97 112 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 98 113 } // for 99 for ( i = 0; i < NoOfMmaps; i += 1) {100 size_t s = i + default_mmap_start(); 114 for ( i; NoOfMmaps ) { 115 size_t s = i + default_mmap_start(); // cross over point 101 116 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || 102 117 locns[i][malloc_usable_size( locns[i] ) - 1] != '\345' ) abort( "malloc/free corrupt storage" ); … … 106 121 // check calloc/free (sbrk) 107 122 108 for ( i = 0; i < NoOfAllocs; i += 1) {123 for ( i; NoOfAllocs ) { 109 124 size_t s = (i + 1) * 20; 110 char * area = (char *)calloc( 5, s );125 char * area = (char *)calloc( 5, s ); 111 126 if ( area == 0 ) abort( "calloc/free out of memory" ); 112 127 if ( area[0] != '\0' || area[s - 1] != '\0' || … … 118 133 } // for 119 134 120 for ( i = 0; i < NoOfAllocs; i += 1) {135 for ( i; NoOfAllocs ) { 121 136 size_t s = i + 1; 122 137 locns[i] = (char *)calloc( 5, s ); … … 128 143 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 129 144 } // for 130 for ( i = 0; i < NoOfAllocs; i += 1) {145 for ( i; NoOfAllocs ) { 131 146 size_t s = i + 1; 132 147 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || … … 137 152 // check calloc/free (mmap) 138 153 139 for ( i = 0; i < NoOfMmaps; i += 1) {140 size_t s = i + default_mmap_start(); 141 char * area = (char *)calloc( 1, s );154 for ( i; NoOfMmaps ) { 155 size_t s = i + default_mmap_start(); // cross over point 156 char * area = (char *)calloc( 1, s ); 142 157 if ( area == 0 ) abort( "calloc/free out of memory" ); 143 158 if ( area[0] != '\0' || area[s - 1] != '\0' ) abort( "calloc/free corrupt storage4.1" ); … … 149 164 } // for 150 165 151 for ( i = 0; i < NoOfMmaps; i += 1) {152 size_t s = i + default_mmap_start(); 166 for ( i; NoOfMmaps ) { 167 size_t s = i + default_mmap_start(); // cross over point 153 168 locns[i] = (char *)calloc( 1, s ); 154 169 if ( locns[i] == 0 ) abort( "calloc/free out of memory" ); … … 159 174 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 160 175 } // for 161 for ( i = 0; i < NoOfMmaps; i += 1) {162 size_t s = i + default_mmap_start(); 176 for ( i; NoOfMmaps ) { 177 size_t s = i + default_mmap_start(); // cross over point 163 178 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || 164 179 locns[i][malloc_usable_size( locns[i] ) - 1] != '\345' ) abort( "calloc/free corrupt storage6" ); … … 170 185 enum { limit = 64 * 1024 }; // check alignments up to here 171 186 172 for ( size_t a = libAlign(); a <= limit; a += a ) {// generate powers of 2173 //sout | alignments[a] | endl;174 for ( int s = 1; s < NoOfAllocs; s += 1 ) {// allocation of size 0 can return null175 char * area = (char *)memalign( a, s );187 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 188 //sout | alignments[a]; 189 for ( s; 1 ~ NoOfAllocs ) { // allocation of size 0 can return null 190 char * area = (char *)memalign( a, s ); 176 191 if ( area == 0 ) abort( "memalign/free out of memory" ); 177 //sout | i | " " | area | endl;192 //sout | i | " " | area; 178 193 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 179 194 abort( "memalign/free bad alignment : memalign(%d,%d) = %p", (int)a, s, area ); … … 187 202 // check memalign/free (mmap) 188 203 189 for ( size_t a = libAlign(); a <= limit; a += a ) {// generate powers of 2190 //sout | alignments[a] | endl;191 for ( i = 1; i < NoOfMmaps; i += 1) {192 size_t s = i + default_mmap_start(); 193 char * area = (char *)memalign( a, s );204 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 205 //sout | alignments[a]; 206 for ( i; 1 ~ NoOfMmaps ) { 207 size_t s = i + default_mmap_start(); // cross over point 208 char * area = (char *)memalign( a, s ); 194 209 if ( area == 0 ) abort( "memalign/free out of memory" ); 195 //sout | i | " " | area | endl;210 //sout | i | " " | area; 196 211 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 197 212 abort( "memalign/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)s, area ); … … 205 220 // check calloc/realloc/free (sbrk) 206 221 207 for ( i = 1; i < 10000; i +=12 ) {222 for ( i; 1 ~ 10_000 ~ 12 ) { 208 223 // initial N byte allocation 209 char * area = (char *)calloc( 5, i );224 char * area = (char *)calloc( 5, i ); 210 225 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); 211 226 if ( area[0] != '\0' || area[i - 1] != '\0' || … … 214 229 215 230 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage. 216 for ( int s = i; s < 256 * 1024; s += 26 ) {// start at initial memory request231 for ( s; i ~ 256 * 1024 ~ 26 ) { // start at initial memory request 217 232 area = (char *)realloc( area, s ); // attempt to reuse storage 218 233 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); … … 226 241 // check calloc/realloc/free (mmap) 227 242 228 for ( i = 1; i < 1000; i +=12 ) {243 for ( i; 1 ~ 10_000 ~ 12 ) { 229 244 // initial N byte allocation 230 size_t s = i + default_mmap_start(); 231 char * area = (char *)calloc( 1, s );245 size_t s = i + default_mmap_start(); // cross over point 246 char * area = (char *)calloc( 1, s ); 232 247 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); 233 248 if ( area[0] != '\0' || area[s - 1] != '\0' || … … 236 251 237 252 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage. 238 for ( int r = i; r < 256 * 1024; r += 26 ) {// start at initial memory request239 area = (char *)realloc( area, r ); // attempt to reuse storage253 for ( r; i ~ 256 * 1024 ~ 26 ) { // start at initial memory request 254 area = (char *)realloc( area, r ); // attempt to reuse storage 240 255 if ( area == 0 ) abort( "calloc/realloc/free out of memory" ); 241 256 if ( area[0] != '\0' || area[r - 1] != '\0' || … … 249 264 250 265 size_t amount = 2; 251 for ( size_t a = libAlign(); a <= limit; a += a ) {// generate powers of 2266 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 252 267 // initial N byte allocation 253 char * area = (char *)memalign( a, amount );// aligned N-byte allocation268 char * area = (char *)memalign( a, amount ); // aligned N-byte allocation 254 269 if ( area == 0 ) abort( "memalign/realloc/free out of memory" ); // no storage ? 255 //sout | alignments[a] | " " | area | endl;270 //sout | alignments[a] | " " | area; 256 271 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 257 272 abort( "memalign/realloc/free bad alignment : memalign(%d,%d) = %p", (int)a, (int)amount, area ); … … 260 275 261 276 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage. 262 for ( int s = amount; s < 256 * 1024; s += 1 ) {// start at initial memory request277 for ( s; amount ~ 256 * 1024 ) { // start at initial memory request 263 278 if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "memalign/realloc/free corrupt storage" ); 264 279 area = (char *)realloc( area, s ); // attempt to reuse storage 265 280 if ( area == 0 ) abort( "memalign/realloc/free out of memory" ); // no storage ? 266 //sout | i | " " | area | endl;281 //sout | i | " " | area; 267 282 if ( (size_t)area % a != 0 ) { // check for initial alignment 268 283 abort( "memalign/realloc/free bad alignment %p", area ); … … 275 290 // check cmemalign/free 276 291 277 for ( size_t a = libAlign(); a <= limit; a += a ) {// generate powers of 2278 //sout | alignments[a] | endl;279 for ( int s = 1; s < limit; s += 1 ) {// allocation of size 0 can return null280 char * area = (char *)cmemalign( a, 1, s );292 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 293 //sout | alignments[a]; 294 for ( s; 1 ~ limit ) { // allocation of size 0 can return null 295 char * area = (char *)cmemalign( a, 1, s ); 281 296 if ( area == 0 ) abort( "cmemalign/free out of memory" ); 282 //sout | i | " " | area | endl;297 //sout | i | " " | area; 283 298 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 284 299 abort( "cmemalign/free bad alignment : cmemalign(%d,%d) = %p", (int)a, s, area ); … … 295 310 296 311 amount = 2; 297 for ( size_t a = libAlign() + libAlign(); a <= limit; a += a ) {// generate powers of 2312 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 298 313 // initial N byte allocation 299 char * area = (char *)cmemalign( a, 1, amount );// aligned N-byte allocation314 char * area = (char *)cmemalign( a, 1, amount ); // aligned N-byte allocation 300 315 if ( area == 0 ) abort( "cmemalign/realloc/free out of memory" ); // no storage ? 301 //sout | alignments[a] | " " | area | endl;316 //sout | alignments[a] | " " | area; 302 317 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 303 318 abort( "cmemalign/realloc/free bad alignment : cmemalign(%d,%d) = %p", (int)a, (int)amount, area ); … … 309 324 310 325 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage. 311 for ( int s = amount; s < 256 * 1024; s += 1 ) {// start at initial memory request326 for ( s; amount ~ 256 * 1024 ) { // start at initial memory request 312 327 if ( area[0] != '\345' || area[s - 2] != '\345' ) abort( "cmemalign/realloc/free corrupt storage2" ); 313 328 area = (char *)realloc( area, s ); // attempt to reuse storage 314 329 if ( area == 0 ) abort( "cmemalign/realloc/free out of memory" ); // no storage ? 315 //sout | i | " " | area | endl;330 //sout | i | " " | area; 316 331 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment 317 332 abort( "cmemalign/realloc/free bad alignment %p", area ); … … 324 339 free( area ); 325 340 } // for 326 //sout | "worker" | thisTask() | "successful completion" | endl;341 //sout | "worker" | thisTask() | "successful completion"; 327 342 } // Worker main 328 343 … … 339 354 // Local Variables: // 340 355 // tab-width: 4 // 341 // compile-command: "cfa -nodebug -O2 heap.c " //356 // compile-command: "cfa -nodebug -O2 heap.cfa" // 342 357 // End: //
Note:
See TracChangeset
for help on using the changeset viewer.