Skip to content

Commit

Permalink
refresh of repo to bring it up to date with 13 tools
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewstanfordjason committed Jul 12, 2013
1 parent 930b5d5 commit 714272c
Show file tree
Hide file tree
Showing 36 changed files with 1,922 additions and 2,091 deletions.
430 changes: 169 additions & 261 deletions app_sdram_benchmark/.cproject

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion app_sdram_benchmark/.project
Expand Up @@ -33,7 +33,7 @@
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value>CONFIG=Debug</value>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
Expand Down
5 changes: 2 additions & 3 deletions app_sdram_benchmark/Makefile
@@ -1,7 +1,7 @@
# The TARGET variable determines what target system the application is
# compiled for. It either refers to an XN file in the source directories
# or a valid argument for the --target option when compiling
TARGET = SLICEKIT-L2
TARGET = SLICEKIT-L16

# The APP_NAME variable determines the name of the final .xe file. It should
# not include the .xe postfix. If left blank the name will default to
Expand All @@ -16,8 +16,7 @@ USED_MODULES = module_sdram module_slicekit_support
# XCC_XC_FLAGS, XCC_C_FLAGS, XCC_ASM_FLAGS, XCC_CPP_FLAGS
# If the variable XCC_MAP_FLAGS is set it overrides the flags passed to
# xcc for the final link (mapping) stage.
XCC_FLAGS_Debug = -g -O3 -Wcodes -Xmapper -Wcodes
XCC_FLAGS_Release = -g -O3 -Wcodes -Xmapper -Wcodes
XCC_FLAGS = -g -O3

# The VERBOSE variable, if set to 1, enables verbose output from the make system.
VERBOSE = 0
Expand Down
127 changes: 58 additions & 69 deletions app_sdram_benchmark/src/app_sdram_benchmark.xc
Expand Up @@ -8,20 +8,24 @@
on tile[0]: sdram_ports ports = {
XS1_PORT_16A, XS1_PORT_1B, XS1_PORT_1G, XS1_PORT_1C, XS1_PORT_1F, XS1_CLKBLK_1 };

static float readWords(chanend server, unsigned count, unsigned page_alignment){
/*
* Plug XA-SK-SDRAM into the STAR slot. Ensure `XMOS LINK` is off. Build and run.
*/

static float readWords(chanend c_server, unsigned count, unsigned page_alignment){
unsigned buf[SDRAM_ROW_WORDS];
timer t;
unsigned now, then;
t :> then;
for (unsigned row = 0; row < SDRAM_ROW_COUNT; row++) {
sdram_buffer_read(server, 0, row, page_alignment, count, buf);
sdram_wait_until_idle(server, buf);
sdram_buffer_read(c_server, 0, row, page_alignment, count, buf);
sdram_wait_until_idle(c_server, buf);
}
t :> now;
return (float)(SDRAM_ROW_COUNT * ((4*100000000/1024)/1024) * count) / (now-then);
}

static float writeWords(chanend server, unsigned count, unsigned page_alignment){
static float writeWords(chanend c_server, unsigned count, unsigned page_alignment){
unsigned buf[SDRAM_ROW_WORDS];
timer t;
unsigned now, then;
Expand All @@ -30,15 +34,15 @@ static float writeWords(chanend server, unsigned count, unsigned page_alignment)
}
t :> then;
for (unsigned row = 0; row < SDRAM_ROW_COUNT; row++) {
sdram_buffer_write(server, 0, row, page_alignment, count, buf);
sdram_wait_until_idle(server, buf);
sdram_buffer_write(c_server, 0, row, page_alignment, count, buf);
sdram_wait_until_idle(c_server, buf);
}

t :> now;
return (float)(SDRAM_ROW_COUNT * ((4*100000000/1024)/1024) * count) / (now-then);
}

static float maxWriteWords(chanend server){
static float maxWriteWords(chanend c_server){
unsigned buf[SDRAM_ROW_WORDS];
timer t;
unsigned now, then;
Expand All @@ -47,30 +51,32 @@ static float maxWriteWords(chanend server){
}
t :> then;
for (unsigned row = 0; row < SDRAM_ROW_COUNT; row++) {
sdram_full_row_write(server,0, row, buf);
sdram_wait_until_idle(server, buf);
sdram_full_row_write(c_server,0, row, buf);
sdram_wait_until_idle(c_server, buf);
}
t :> now;
return (float)(SDRAM_ROW_COUNT * SDRAM_ROW_WORDS * ((4*100000000/1024)/1024)) / (now-then);
}
static float maxReadWords(chanend server){
static float maxReadWords(chanend c_server){
unsigned buf[SDRAM_ROW_WORDS];
timer t;
unsigned now, then;
t :> then;
for (unsigned row = 0; row < SDRAM_ROW_COUNT; row++) {
sdram_full_row_read(server, 0, row, buf);
sdram_wait_until_idle(server, buf);
sdram_full_row_read(c_server, 0, row, buf);
sdram_wait_until_idle(c_server, buf);
}
t :> now;
return (float)(SDRAM_ROW_COUNT * SDRAM_ROW_WORDS * ((4*100000000/1024)/1024)) / (now-then);
}
void load_thread(chanend in_t, chanend out_t) {

static void load_thread(chanend in_t, chanend out_t) {
set_thread_fast_mode_on();
in_t :> int;
out_t <: 1;
}
void sanity_check(chanend sdram_c) {

static void sanity_check(chanend sdram_c) {
#define SANITY_TEST_SIZE 8
#define SANITY_TEST_BANK 1
#define SANITY_TEST_ROW 1
Expand Down Expand Up @@ -99,26 +105,26 @@ void sanity_check(chanend sdram_c) {
if(VERBOSE)
printf("\tPassed\n");
}
void speed_regression_single_thread(chanend server, unsigned cores) {
sanity_check(server);
static void speed_regression_single_thread(chanend c_server, unsigned cores) {
sanity_check(c_server);
if(VERBOSE){
printf("Words\tWrite\tWrite\tRead\tRead\n");
printf("\tsingle\tmulti\tsingle\tmulti\n");
}
for(unsigned word_count = 1; word_count <= SDRAM_ROW_WORDS; word_count++){
float single_page_write = writeWords(server, word_count, 0);
float multi_page_write = writeWords(server, word_count, SDRAM_ROW_WORDS-1);
float single_page_read = writeWords(server, word_count, 0);
float multi_page_read = writeWords(server, word_count, SDRAM_ROW_WORDS-1);
float single_page_write = writeWords(c_server, word_count, 0);
float multi_page_write = writeWords(c_server, word_count, SDRAM_ROW_WORDS-1);
float single_page_read = writeWords(c_server, word_count, 0);
float multi_page_read = writeWords(c_server, word_count, SDRAM_ROW_WORDS-1);
if(VERBOSE)
printf("%d\t%.2f\t%.2f\t%.2f\t%.2f\n", word_count, single_page_write, multi_page_write, single_page_read, multi_page_read);
}
printf("Cores active: %d\n", cores);
printf("Max write: %.2f MB/s\n", maxWriteWords(server));
printf("Max read : %.2f MB/s\n", maxReadWords(server));
printf("Max write: %.2f MB/s\n", maxWriteWords(c_server));
printf("Max read : %.2f MB/s\n", maxReadWords(c_server));
}

{unsigned, unsigned} varWriteWords(chanend server, unsigned count){
{unsigned, unsigned} varWriteWords(chanend c_server, unsigned count){
unsigned buf[SDRAM_ROW_WORDS];
timer t;
unsigned now, then;
Expand All @@ -130,8 +136,8 @@ void speed_regression_single_thread(chanend server, unsigned cores) {
for (unsigned row = 0; row < 10000; row++) {
unsigned time;
t :> then;
sdram_buffer_write(server, 0, row, 0, count, buf);
sdram_wait_until_idle(server, buf);
sdram_buffer_write(c_server, 0, row, 0, count, buf);
sdram_wait_until_idle(c_server, buf);
t :> now;
time = now - then;
if (time < min) min = time;
Expand All @@ -141,17 +147,17 @@ void speed_regression_single_thread(chanend server, unsigned cores) {
}


void latency_regression_single_thread(chanend server, unsigned cores) {
static void latency_regression_single_thread(chanend c_server, unsigned cores) {
unsigned total = 0;
unsigned min_results[SDRAM_ROW_WORDS+1];
unsigned max_results[SDRAM_ROW_WORDS+1];
float min_latency=0;
float max_latency=0;

sanity_check(server);
sanity_check(c_server);
for(unsigned word_count = 1; word_count <= SDRAM_ROW_WORDS; word_count++){
unsigned min, max;
{min, max} = varWriteWords(server, word_count);
{min, max} = varWriteWords(c_server, word_count);
total += max;
min_results[word_count] = min;
max_results[word_count] = max;
Expand All @@ -167,65 +173,50 @@ void latency_regression_single_thread(chanend server, unsigned cores) {
printf("Min Latency: %.2f\nMax Latency: %.2f\n", min_latency, max_latency);
}

void regression(chanend server, chanend in_t, chanend out_t, unsigned cores) {
speed_regression_single_thread(server, cores);
latency_regression_single_thread(server, cores);
static void regression(chanend c_server, chanend in_t, chanend out_t, unsigned cores) {
speed_regression_single_thread(c_server, cores);
latency_regression_single_thread(c_server, cores);
out_t <: 1;
in_t :> int;
}

void test_2_threads(chanend server) {
//sdram_server
speed_regression_single_thread(server, 2);
latency_regression_single_thread(server, 2);
}

void test_3_threads(chanend server) {
chan c[2];
par {
//sdram_server
regression(server, c[0], c[1], 3);
load_thread(c[1], c[0]);
}
}

void test_4_threads(chanend server) {
static void test_4_threads(chanend c_server) {
chan c[3];
par {
//sdram_server
regression(server, c[0], c[1], 4);
//sdram_c_server
regression(c_server, c[0], c[1], 4);
load_thread(c[1], c[2]);
load_thread(c[2], c[0]);
}
}

void test_5_threads(chanend server) {
static void test_5_threads(chanend c_server) {
chan c[4];
par {
//sdram_server
regression(server, c[0], c[1], 5);
//sdram_c_server
regression(c_server, c[0], c[1], 5);
load_thread(c[1], c[2]);
load_thread(c[2], c[3]);
load_thread(c[3], c[0]);
}
}
void test_6_threads(chanend server) {
static void test_6_threads(chanend c_server) {
chan c[5];
par {
//sdram_server
regression(server, c[0], c[1], 6);
//sdram_c_server
regression(c_server, c[0], c[1], 6);
load_thread(c[1], c[2]);
load_thread(c[2], c[3]);
load_thread(c[3], c[4]);
load_thread(c[4], c[0]);
}
}

void test_7_threads(chanend server) {
static void test_7_threads(chanend c_server) {
chan c[6];
par {
//sdram_server
regression(server, c[0], c[1], 7);
//sdram_c_server
regression(c_server, c[0], c[1], 7);
load_thread(c[1], c[2]);
load_thread(c[2], c[3]);
load_thread(c[3], c[4]);
Expand All @@ -234,11 +225,11 @@ void test_7_threads(chanend server) {
}
}

void test_8_threads(chanend server) {
static void test_8_threads(chanend c_server) {
chan c[7];
par {
//sdram_server
regression(server, c[0], c[1], 8);
//sdram_c_server
regression(c_server, c[0], c[1], 8);
load_thread(c[1], c[2]);
load_thread(c[2], c[3]);
load_thread(c[3], c[4]);
Expand All @@ -248,14 +239,12 @@ void test_8_threads(chanend server) {
}
}

void sdram_client(chanend server) {
test_8_threads(server);
test_7_threads(server);
test_6_threads(server);
test_5_threads(server);
test_4_threads(server);
test_3_threads(server);
test_2_threads(server);
static void sdram_client(chanend c_server) {
test_8_threads(c_server);
test_7_threads(c_server);
test_6_threads(c_server);
test_5_threads(c_server);
test_4_threads(c_server);
}

int main() {
Expand Down

0 comments on commit 714272c

Please sign in to comment.