/* * Copyright (c) 2013-2015 Intel Corporation. All rights reserved. * * This software is available to you under the BSD license * below: * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #include #include #include #include #include #include "benchmark_shared.h" static int run(void) { int i, ret = 0; ret = ft_init_fabric(); if (ret) return ret; if (!(opts.options & FT_OPT_SIZE)) { for (i = 0; i < TEST_CNT; i++) { if (!ft_use_size(i, opts.sizes_enabled)) continue; opts.transfer_size = test_size[i].size; init_test(&opts, test_name, sizeof(test_name)); ret = pingpong(); if (ret) goto out; } } else { init_test(&opts, test_name, sizeof(test_name)); ret = pingpong(); if (ret) goto out; } ft_finalize(); out: return ret; } int main(int argc, char **argv) { int op, ret; opts = INIT_OPTS; opts.options = FT_OPT_RX_CNTR | FT_OPT_TX_CNTR; opts.comp_method = FT_COMP_SREAD; hints = fi_allocinfo(); if (!hints) return EXIT_FAILURE; while ((op = getopt_long(argc, argv, "h" CS_OPTS INFO_OPTS BENCHMARK_OPTS, long_opts, &lopt_idx)) != -1) { switch (op) { default: if (!ft_parse_long_opts(op, optarg)) continue; ft_parse_benchmark_opts(op, optarg); ft_parseinfo(op, optarg, hints, &opts); ft_parsecsopts(op, optarg, &opts); break; case '?': case 'h': ft_csusage(argv[0], "Ping pong client and server using counters."); ft_benchmark_usage(); ft_longopts_usage(); return EXIT_FAILURE; } } if (optind < argc) opts.dst_addr = argv[optind]; hints->ep_attr->type = FI_EP_RDM; hints->caps = FI_MSG; hints->domain_attr->mr_mode = opts.mr_mode; hints->domain_attr->threading = FI_THREAD_DOMAIN; hints->tx_attr->tclass = FI_TC_LOW_LATENCY; hints->addr_format = opts.address_format; hints->mode |= FI_CONTEXT; ret = run(); ft_free_res(); return ft_exit_code(ret); }