Skip to content

Commit

Permalink
v1.0: Added PUT Perf test
Browse files Browse the repository at this point in the history
  • Loading branch information
RipleyTom committed Jun 15, 2019
1 parent c136e0c commit 6b81a08
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
5 changes: 4 additions & 1 deletion buildps3.bat
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ spu-lv2-gcc -O3 -c task_spufloat.c -o task_spufloat.o
spu-lv2-gcc -O3 -c task_spuspinlock.c -o task_spuspinlock.o
spu-lv2-gcc -O3 -c task_putlluc.c -o task_putlluc.o
spu-lv2-gcc -O3 -c task_putllc.c -o task_putllc.o
spu-lv2-gcc -O3 -c task_put.c -o task_put.o

spu-lv2-gcc -O3 -mspurs-task task.o -o task.elf
spu-lv2-gcc -O3 -mspurs-task task_pingpong.o -o task_pingpong.elf
Expand All @@ -16,6 +17,7 @@ spu-lv2-gcc -O3 -mspurs-task task_spufloat.o -o task_spufloat.elf
spu-lv2-gcc -O3 -mspurs-task task_spuspinlock.o -latomic -o task_spuspinlock.elf
spu-lv2-gcc -O3 -mspurs-task task_putlluc.o -ldma -o task_putlluc.elf
spu-lv2-gcc -O3 -mspurs-task task_putllc.o -ldma -o task_putllc.elf
spu-lv2-gcc -O3 -mspurs-task task_put.o -ldma -o task_put.elf

spu_elf-to-ppu_obj task.elf task.ppu.o
spu_elf-to-ppu_obj task_pingpong.elf task_pingpong.ppu.o
Expand All @@ -25,6 +27,7 @@ spu_elf-to-ppu_obj task_spufloat.elf task_spufloat.ppu.o
spu_elf-to-ppu_obj task_spuspinlock.elf task_spuspinlock.ppu.o
spu_elf-to-ppu_obj task_putlluc.elf task_putlluc.ppu.o
spu_elf-to-ppu_obj task_putllc.elf task_putllc.ppu.o
spu_elf-to-ppu_obj task_put.elf task_put.ppu.o

ppu-lv2-gcc -O3 -c spurs_helpers.c -o spurs_helpers.o
ppu-lv2-gcc -O3 -c test_avalanche.c -o test_avalanche.o
Expand All @@ -36,5 +39,5 @@ ppu-lv2-gcc -O3 -c test_block.c -o test_block.o
ppu-lv2-gcc -O3 -c main.c -o main.o


ppu-lv2-gcc -O3 spurs_helpers.o test_avalanche.o test_pingpong.o test_mfc64.o test_spu_inst.o test_spinlock.o test_block.o main.o task.ppu.o task_pingpong.ppu.o task_mfc64.ppu.o task_spuint.ppu.o task_spufloat.ppu.o task_spuspinlock.ppu.o task_putlluc.ppu.o task_putllc.ppu.o -lsysmodule_stub -lspurs_stub -o spurs_test.elf
ppu-lv2-gcc -O3 spurs_helpers.o test_avalanche.o test_pingpong.o test_mfc64.o test_spu_inst.o test_spinlock.o test_block.o main.o task.ppu.o task_pingpong.ppu.o task_mfc64.ppu.o task_spuint.ppu.o task_spufloat.ppu.o task_spuspinlock.ppu.o task_putlluc.ppu.o task_putllc.ppu.o task_put.ppu.o -lsysmodule_stub -lspurs_stub -o spurs_test.elf
make_fself spurs_test.elf spurs_test.self
12 changes: 9 additions & 3 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
printf("%s completed in %llu ms (PS3: %u ms)\n", name, (time2 - time1), reference); \
}

#define NUM_TESTS 9
#define NUM_TESTS 10

enum tests
{
Expand All @@ -40,6 +40,7 @@ enum tests
TEST_SPUSPINLOCK,
TEST_SPUPUTLLUC,
TEST_SPUPUTLLC,
TEST_SPUPUT,
};

#define AVALANCHE_NAME "SPU Task Avalanche"
Expand All @@ -51,6 +52,7 @@ enum tests
#define SPUSPINLOCK_NAME "SPU SpinLock"
#define SPUPUTLLUC_NAME "PUTLLUC Perf"
#define SPUPUTLLC_NAME "PUTLLC Perf"
#define SPUPUT_NAME "PUT Perf"

typedef struct
{
Expand All @@ -68,13 +70,15 @@ const arg_test arg_conv[NUM_TESTS] = {
{'F', TEST_SPUFLOAT, SPUFLOAT_NAME},
{'L', TEST_SPUSPINLOCK, SPUSPINLOCK_NAME},
{'U', TEST_SPUPUTLLUC, SPUPUTLLUC_NAME},
{'T', TEST_SPUPUTLLC, SPUPUTLLC_NAME}};
{'T', TEST_SPUPUTLLC, SPUPUTLLC_NAME},
{'R', TEST_SPUPUT, SPUPUT_NAME}};

extern const CellSpursTaskBinInfo _binary_task_task_spuint_elf_taskbininfo;
extern const CellSpursTaskBinInfo _binary_task_task_spufloat_elf_taskbininfo;

extern const CellSpursTaskBinInfo _binary_task_task_putlluc_elf_taskbininfo;
extern const CellSpursTaskBinInfo _binary_task_task_putllc_elf_taskbininfo;
extern const CellSpursTaskBinInfo _binary_task_task_put_elf_taskbininfo;

bool verbose = false;

Expand All @@ -88,7 +92,7 @@ uint64_t get_time()

int main(int argc, char *argv[])
{
printf("SPU Test v0.9.0 by GalCiv\n");
printf("SPU Test v1.0.0 by GalCiv\n");

unsigned int seed = 12345678;
unsigned int repeat = 1;
Expand Down Expand Up @@ -211,6 +215,8 @@ int main(int argc, char *argv[])
DO_A_TEST(SPUPUTLLUC_NAME, test_block(spurs2, &_binary_task_task_putlluc_elf_taskbininfo), 3853);
if (tests_to_run[TEST_SPUPUTLLC])
DO_A_TEST(SPUPUTLLC_NAME, test_block(spurs2, &_binary_task_task_putllc_elf_taskbininfo), 3364);
if (tests_to_run[TEST_SPUPUT])
DO_A_TEST(SPUPUT_NAME, test_block(spurs2, &_binary_task_task_put_elf_taskbininfo), 3984);
}

timeend = get_time();
Expand Down
34 changes: 34 additions & 0 deletions task_put.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#include <stdint.h>
#include <stdlib.h>
#include <spu_intrinsics.h>
#include <cell/spurs.h>
#include <cell/dma.h>

CELL_SPU_LS_PARAM(16 * 1024, 16 * 1024);

#define NUM_PUTC 10000000

vec_uint4 ls_buf[128 / sizeof(vec_uint4)] __attribute__((aligned(128)));

int cellSpursTaskMain(qword argTask, uint64_t argTaskset)
{
const uint64_t addr = argTaskset;

for (int index = 0; index < (128 / sizeof(vec_uint4)); index++)
{
ls_buf[index] = (vec_uint4)argTask;
}

vec_uint4 toinc;
toinc[0] = toinc[1] = toinc[2] = toinc[3] = 1;

uint32_t result;

for (unsigned long counter = 0; counter < NUM_PUTC; counter++)
{
cellDmaPut(&ls_buf[counter % ((128 - 32) / sizeof(vec_uint4))], addr, 32, 0, 0, 0);
ls_buf[counter % (128 / sizeof(vec_uint4))] = spu_add(ls_buf[counter % (128 / sizeof(vec_uint4))], toinc);
}

return 0;
}

0 comments on commit 6b81a08

Please sign in to comment.