Add tilled version of puts and gets at wavefront level to the functional test suite

* Implemented tiled version of put*_wave and get*_wave functions
* Maintain single kernel that supports both tiled and untiled versions
* Disable IPC in the default RO build script
Bu işleme şunda yer alıyor:
avinashkethineedi
2024-09-07 16:06:36 -07:00
ebeveyn d226922733
işleme b6d31ac7ef
9 değiştirilmiş dosya ile 78 ekleme ve 82 silme
+6 -54
Dosyayı Görüntüle
@@ -37,47 +37,6 @@ __global__ void ExtendedPrimitiveTest(int loop, int skip, uint64_t *timer,
roc_shmem_wg_init();
roc_shmem_wg_ctx_create(ctx_type, &ctx);
uint64_t start;
for (int i = 0; i < loop + skip; i++) {
if (i == skip) start = roc_shmem_timer();
switch (type) {
case WGGetTestType:
roc_shmemx_ctx_getmem_wg(ctx, r_buf, s_buf, size, 1);
break;
case WGGetNBITestType:
roc_shmemx_ctx_getmem_nbi_wg(ctx, r_buf, s_buf, size, 1);
break;
case WGPutTestType:
roc_shmemx_ctx_putmem_wg(ctx, r_buf, s_buf, size, 1);
break;
case WGPutNBITestType:
roc_shmemx_ctx_putmem_nbi_wg(ctx, r_buf, s_buf, size, 1);
break;
default:
break;
}
}
roc_shmem_ctx_quiet(ctx);
if (hipThreadIdx_x == 0) {
timer[hipBlockIdx_x] = roc_shmem_timer() - start;
}
roc_shmem_wg_ctx_destroy(&ctx);
roc_shmem_wg_finalize();
}
__global__ void ExtendedPrimitiveTestTiled(int loop, int skip, uint64_t *timer,
char *s_buf, char *r_buf, int size,
TestType type,
ShmemContextType ctx_type) {
__shared__ roc_shmem_ctx_t ctx;
roc_shmem_wg_init();
roc_shmem_wg_ctx_create(ctx_type, &ctx);
uint64_t start;
uint64_t idx = size * get_flat_grid_id();
s_buf += idx;
@@ -119,8 +78,8 @@ __global__ void ExtendedPrimitiveTestTiled(int loop, int skip, uint64_t *timer,
*****************************************************************************/
ExtendedPrimitiveTester::ExtendedPrimitiveTester(TesterArguments args)
: Tester(args) {
s_buf = (char *)roc_shmem_malloc(args.max_msg_size * args.wg_size);
r_buf = (char *)roc_shmem_malloc(args.max_msg_size * args.wg_size);
s_buf = (char *)roc_shmem_malloc(args.max_msg_size * args.num_wgs);
r_buf = (char *)roc_shmem_malloc(args.max_msg_size * args.num_wgs);
}
ExtendedPrimitiveTester::~ExtendedPrimitiveTester() {
@@ -129,24 +88,17 @@ ExtendedPrimitiveTester::~ExtendedPrimitiveTester() {
}
void ExtendedPrimitiveTester::resetBuffers(uint64_t size) {
memset(s_buf, '0', args.max_msg_size * args.wg_size);
memset(r_buf, '1', args.max_msg_size * args.wg_size);
memset(s_buf, '0', size * args.num_wgs);
memset(r_buf, '1', size * args.num_wgs);
}
void ExtendedPrimitiveTester::launchKernel(dim3 gridSize, dim3 blockSize,
int loop, uint64_t size) {
size_t shared_bytes = 0;
if (args.tiled){
hipLaunchKernelGGL(ExtendedPrimitiveTestTiled, gridSize, blockSize, shared_bytes,
hipLaunchKernelGGL(ExtendedPrimitiveTest, gridSize, blockSize, shared_bytes,
stream, loop, args.skip, timer, s_buf, r_buf, size, _type,
_shmem_context);
}
else {
hipLaunchKernelGGL(ExtendedPrimitiveTest, gridSize, blockSize, shared_bytes,
stream, loop, args.skip, timer, s_buf, r_buf, size, _type,
_shmem_context);
}
num_msgs = (loop + args.skip) * gridSize.x;
num_timed_msgs = loop * gridSize.x;
@@ -158,7 +110,7 @@ void ExtendedPrimitiveTester::verifyResults(uint64_t size) {
: 1;
if (args.myid == check_id) {
for (int i = 0; i < size; i++) {
for (int i = 0; i < size * args.num_wgs; i++) {
if (r_buf[i] != '0') {
fprintf(stderr, "Data validation error at idx %d\n", i);
fprintf(stderr, "Got %c, Expected %c \n", r_buf[i], '0');