예제 #1
0
int do_wconsole(int argc, param *argv) {
    if (argc != 1) return -1;
    const char *line = argv[0].s;
    while (*line) {
        if (remote_msg(0x80000000 | *line)) return -1;
        line++;
    }
    if (remote_msg(0x80000000 | '\r')) return -1;
    return 0;
}
예제 #2
0
int main(int argc, char **argv) {

    check_mpi_call( MPI_Init(&argc, &argv));

    int mpi_rank;
    int mpi_size;
    check_mpi_call( MPI_Comm_size(MPI_COMM_WORLD, &mpi_size));
    check_mpi_call( MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank));
    const int mpi_root = 0;

    auto hostname = get_hostname();
    auto gpus = get_gpu_uuids();
    auto num_gpus = gpus.size();

    if(mpi_rank==mpi_root) {
        std::cout << "GPU affinity test for " << mpi_size << " MPI ranks\n";
    }

    std::stringstream s;
    s << "rank " << std::setw(6) << mpi_rank << " @ " << hostname;
    if(num_gpus==1) {
        s << " : GPU-" << gpus[0] << "\n";
    }
    else {
        s << "\n";
        for(auto i=0; i<num_gpus; ++i) {
            s << " gpu " << std::setfill(' ') << std::setw(3) << i
              << " : GPU-" << gpus[i]
              << "\n";
        }
    }
    auto message = s.str();
    // add 1 for the terminating \0
    int message_length = message.size() + 1;

    std::vector<int> message_lengths(mpi_size);
    check_mpi_call(
        MPI_Gather( &message_length,     1, MPI_INT,
                    &message_lengths[0], 1, MPI_INT,
                    mpi_root, MPI_COMM_WORLD)
    );

    if(mpi_rank==mpi_root) {
        std::cout << message;
        for(auto i=1; i<mpi_size; ++i) {
            std::vector<char> remote_msg(message_lengths[i]);
            MPI_Status status;
            check_mpi_call(
                MPI_Recv( &remote_msg[0], message_lengths[i], MPI_CHAR,
                          i, i, MPI_COMM_WORLD, &status)
            );
            std::cout << &remote_msg[0];
        }
    }
    else {
        check_mpi_call(
            MPI_Send( message.c_str(), message_length, MPI_CHAR,
                      mpi_root, mpi_rank, MPI_COMM_WORLD)
        );
    }

    MPI_Finalize();
}