allow blocks of up to 24 KB (three banks)
authorSebastian <git@sraa.de>
Thu, 26 Jun 2014 01:44:39 +0000 (01:44 +0000)
committerSebastian <git@sraa.de>
Thu, 26 Jun 2014 01:44:39 +0000 (01:44 +0000)
lb/esrc/lb_2d.c

index 6f36cef15dcc21894ffbe1381c9ecb0d97710813..d58dedf2cc39ddde3389c0314e6410994e08e9c0 100644 (file)
@@ -3,6 +3,7 @@
 #include <e-lib.h>
 #include "../shared.h"
 
+#include <stdint.h>
 #include <string.h>
 
 #include "lb.h"
 /* shared memory overlay */
 volatile shm_t shm SECTION(".shared_dram");
 
-/* local block */
-d2q9_block_t block SECTION(".data_bank2");
+/* statically allocate dummy memory
+   to prevent linker from putting stuff there */
+uint8_t dummy_bank1[8192] SECTION(".data_bank1");
+uint8_t dummy_bank2[8192] SECTION(".data_bank2");
+uint8_t dummy_bank3[8192] SECTION(".data_bank3");
+
+/* local block, aliased over dummy_bankX */
+d2q9_block_t *block = (void*)0x2000;
 
 void delay(void)
 {
@@ -26,52 +33,52 @@ int main()
 
        const FLOAT omega = 1.0;
 
-       init_block(block);
+       init_block(*block);
 
        while(1) {
 #if 0
                /* collide all nodes */
                for(int x = 0; x < BLOCK_X; x++)
                        for(int y = 0; y < BLOCK_Y; y++)
-                               collide_and_swap(block, x, y, omega);
+                               collide_and_swap(*block, x, y, omega);
 
                /* XXX synchronize */
 
                /* stream all nodes */
                for(int x = 0; x < BLOCK_X; x++)
                        for(int y = 0; y < BLOCK_Y; y++)
-                               stream_node(block, x, y);
+                               stream_node(*block, x, y);
 
                /* XXX synchronize */
 
 #else
                /* collide boundaries: top, bottom */
                for(int x = 0; x < BLOCK_X; x++) {
-                       collide_and_swap(block, x, 0,         omega);
-                       collide_and_swap(block, x, BLOCK_Y-1, omega);
+                       collide_and_swap(*block, x, 0,         omega);
+                       collide_and_swap(*block, x, BLOCK_Y-1, omega);
                }
 
                /* collide boundaries: left, right */
                for(int y = 1; y < BLOCK_Y-1; y++) {
-                       collide_and_swap(block, 0,         y, omega);
-                       collide_and_swap(block, BLOCK_X-1, y, omega);
+                       collide_and_swap(*block, 0,         y, omega);
+                       collide_and_swap(*block, BLOCK_X-1, y, omega);
                }
 
                /* XXX synchronize */
 
                /* collide and stream the bulk */
-               collide_and_stream_bulk(block, omega);
+               collide_and_stream_bulk(*block, omega);
 
                /* stream the boundaries: left, right */
                for(int x = 0; x < BLOCK_X; x++) {
-                       stream_node(block, x, 0        );
-                       stream_node(block, x, BLOCK_Y-1);
+                       stream_node(*block, x, 0        );
+                       stream_node(*block, x, BLOCK_Y-1);
                }
 
                /* stream the boundaries: left, right */
                for(int y = 1; y < BLOCK_Y-1; y++) {
-                       stream_node(block, 0,         y);
-                       stream_node(block, BLOCK_X-1, y);
+                       stream_node(*block, 0,         y);
+                       stream_node(*block, BLOCK_X-1, y);
                }
 
                /* XXX synchronize */
@@ -79,7 +86,7 @@ int main()
 
 
                /* copy grid to shm */
-               memcpy(&shm.lattice[0], &block, sizeof(d2q9_block_t));
+               memcpy(&shm.lattice[0], block, sizeof(d2q9_block_t));
 
                /* flag host */
                shm.states[0]++;