Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/libfil.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ struct fil_opts {
uint32_t batch_size; ///< The number of files per batch
bool buffered; ///< Whether to use O_DIRECT with POSIX
bool async; ///< Whether to use async API with cuFile
bool register_bufs; ///< Register cuFile device buffers with cuFileBufRegister
};

/**
Expand Down
4 changes: 4 additions & 0 deletions src/cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ print_help(const char *name)
"the timed run (default = 0)\n");
fprintf(stderr, "\t --buffered \t | \t Don't open with O_DIRECT when using POSIX\n");
fprintf(stderr, "\t --async \t | \t Use the async API when using cuFile\n");
fprintf(stderr, "\t --register_bufs | \t Register device buffers with cuFileBufRegister "
"(cuFile backend)\n");
fprintf(stderr, "\t --summary \t | \t Print IO and dataset stats\n");
fprintf(stderr, "\t --help \t | \t Print this message\n");
}
Expand Down Expand Up @@ -110,6 +112,8 @@ parse_args(int argc, char *argv[], struct fil_cli_args *args, struct fil_opts *o
opts->buffered = true;
} else if (strcmp(argv[i], "--async") == 0) {
opts->async = true;
} else if (strcmp(argv[i], "--register_bufs") == 0) {
opts->register_bufs = true;
} else if (strcmp(argv[i], "--summary") == 0) {
args->summary = true;
} else if (strcmp(argv[i], "--help") == 0) {
Expand Down
24 changes: 23 additions & 1 deletion src/iter.c
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,17 @@ _alloc(struct fil_iter *iter, uint32_t n_buffers)
err);
return err;
}
if (strcmp(iter->opts->backend, "cufile") == 0 &&
iter->opts->register_bufs) {
CUfileError_t fstatus = cuFileBufRegister(
device->buffers[j], iter->buffer_size, 0);
if (fstatus.err != CU_FILE_SUCCESS) {
fprintf(stderr,
"cuFileBufRegister(buffers[%d]): %d\n", i,
fstatus.err);
return fstatus.err;
}
}
break;
}
if (!device->buffers[j]) {
Expand Down Expand Up @@ -638,6 +649,10 @@ fil_term(struct fil_iter *iter)
break;
case FIL_FILE:
for (uint32_t j = 0; j < device->n_buffers; j++) {
if (strcmp(iter->opts->backend, "cufile") == 0 &&
iter->opts->register_bufs) {
cuFileBufDeregister(device->buffers[j]);
}
cudaFree(device->buffers[j]);
}
break;
Expand Down Expand Up @@ -718,6 +733,12 @@ fil_init(struct fil_iter **iter, char **dev_uris, uint32_t n_devs, struct fil_op
return EINVAL;
}

if (opts->register_bufs && strcmp(opts->backend, "cufile") != 0) {
fprintf(stderr,
"opts->register_bufs == true is only compatible with cuFile backend");
return EINVAL;
}

if (!opts->max_file_size &&
(strcmp(opts->backend, "aisio-cpu") == 0 || strcmp(opts->backend, "aisio-gpu") == 0 ||
strcmp(opts->backend, "aisio-p2p") == 0)) {
Expand Down Expand Up @@ -871,7 +892,8 @@ fil_opts_default()
.max_file_size = 0,
.batch_size = 1,
.buffered = false,
.async = false};
.async = false,
.register_bufs = false};

return opts;
}
Expand Down
Loading