From 37c8a47691dbe0717a224a6430f6135d5f3c1a35 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 26 Jun 2014 01:44:39 +0000 Subject: [PATCH] allow blocks of up to 24 KB (three banks) --- lb/esrc/lb_2d.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/lb/esrc/lb_2d.c b/lb/esrc/lb_2d.c index 6f36cef..d58dedf 100644 --- a/lb/esrc/lb_2d.c +++ b/lb/esrc/lb_2d.c @@ -3,6 +3,7 @@ #include #include "../shared.h" +#include #include #include "lb.h" @@ -10,8 +11,14 @@ /* 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]++; -- 2.30.2