parent
5bf671b4aa
commit
10669f1fe7
@ -1,29 +0,0 @@
|
|||||||
|
|
||||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License. */
|
|
||||||
|
|
||||||
#include "mpi_client.h"
|
|
||||||
#include "mpi_utils.h"
|
|
||||||
|
|
||||||
namespace paddle {
|
|
||||||
namespace operators {
|
|
||||||
namespace detail {
|
|
||||||
bool MPIClient::AsyncSendVariable() {
|
|
||||||
char* msg = "123456787654";
|
|
||||||
int dst = 1;
|
|
||||||
MPIIsend send = MPIIsend(dst, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MPIClient::Wait() {}
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
} // namespace operators
|
|
||||||
} // namespace paddle
|
|
@ -1,56 +0,0 @@
|
|||||||
|
|
||||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License. */
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
#include <map>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "paddle/fluid/framework/data_type.h"
|
|
||||||
#include "paddle/fluid/framework/lod_tensor.h"
|
|
||||||
#include "paddle/fluid/framework/scope.h"
|
|
||||||
#include "paddle/fluid/framework/selected_rows.h"
|
|
||||||
|
|
||||||
namespace paddle {
|
|
||||||
namespace operators {
|
|
||||||
namespace detail {
|
|
||||||
class MPIClient {
|
|
||||||
public:
|
|
||||||
// bool AsyncSendVariable(const std::string& ep,
|
|
||||||
// const platform::DeviceContext& ctx,
|
|
||||||
// const framework::Scope& scope,
|
|
||||||
// const std::string& var_name,
|
|
||||||
// int64_t time_out = 600 * 1000);
|
|
||||||
|
|
||||||
// bool AsyncGetVariable(const std::string& ep,
|
|
||||||
// const platform::DeviceContext& ctx,
|
|
||||||
// const framework::Scope& scope,
|
|
||||||
// const std::string& var_name,
|
|
||||||
// int64_t time_out = 600 * 1000);
|
|
||||||
|
|
||||||
// void AsyncSendBatchBarrier(const std::string& ep,
|
|
||||||
// int64_t time_out = 600 * 1000);
|
|
||||||
|
|
||||||
// void AsyncSendFetchBarrier(const std::string& ep,
|
|
||||||
// int64_t time_out = 600 * 1000);
|
|
||||||
|
|
||||||
bool AsyncSendVariable();
|
|
||||||
|
|
||||||
bool Wait();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int64_t req_count_ = 0;
|
|
||||||
};
|
|
||||||
} // namespace detail
|
|
||||||
} // namespace operators
|
|
||||||
} // namespace paddle
|
|
@ -1,23 +0,0 @@
|
|||||||
|
|
||||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License. */
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
namespace paddle {
|
|
||||||
namespace operators {
|
|
||||||
namespace detail {
|
|
||||||
class MPIServer {
|
|
||||||
public:
|
|
||||||
private:
|
|
||||||
};
|
|
||||||
} // namespace detail
|
|
||||||
} // namespace operators
|
|
||||||
} // namespace paddle
|
|
@ -1,90 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by tangwei12 on 2018/3/27.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <mpi.h>
|
|
||||||
#include "mpi_utils.h"
|
|
||||||
|
|
||||||
#define max_worker_name_length 128
|
|
||||||
#define mpi_tag = 2008
|
|
||||||
|
|
||||||
namespace paddle {
|
|
||||||
namespace operators {
|
|
||||||
namespace detail {
|
|
||||||
MPIUtils::MPIUtils(const std::string &worker_name) {
|
|
||||||
InitMPI();
|
|
||||||
|
|
||||||
int rank = 0, size = 1;
|
|
||||||
char my_name[max_work_group_size];
|
|
||||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|
||||||
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
|
||||||
snprintf(my_name, max_worker_name_length, worker_name.c_str());
|
|
||||||
|
|
||||||
std::vector<char> worker_names(size * max_worker_name_length);
|
|
||||||
MPI_Allgather(my_name, max_worker_name_length, MPI_CHAR, &worker_names[0],
|
|
||||||
max_worker_name_length, MPI_CHAR, MPI_COMM_WORLD);
|
|
||||||
for (int i = 0; i < number_of_procs; i++) {
|
|
||||||
name_to_id_[std::string(&worker_names[i * 128])] = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MPIUtils::InitMPI() {
|
|
||||||
int flag = 0;
|
|
||||||
MPI_CHECK(MPI_Initialized(&flag));
|
|
||||||
|
|
||||||
if (!flag) {
|
|
||||||
int rank = 0, size = 1, len = -1;
|
|
||||||
char host_name[max_worker_name_length];
|
|
||||||
|
|
||||||
MPI_Init(0, 0);
|
|
||||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|
||||||
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
|
||||||
MPI_Get_processor_name(host_name, &len);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
MPISend::MPISend(const Meta &meta) {
|
|
||||||
done1_ = 1;
|
|
||||||
done2_ = 0;
|
|
||||||
this->meta = meta;
|
|
||||||
}
|
|
||||||
|
|
||||||
MPISend::Send() {
|
|
||||||
MPI_Send(&meta.request, meta.count, meta.datatype, meta.dst, meta.tag,
|
|
||||||
MPI_COMM_WORLD);
|
|
||||||
done2_ = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MPISend::IsReady() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MPISend::IsFinished() { return done1_ && done2_; }
|
|
||||||
|
|
||||||
MPISend::~MPISend() { MPI_Free_mem(meta); }
|
|
||||||
|
|
||||||
|
|
||||||
MPIRecv::MPIRecv(const Meta &meta) {
|
|
||||||
this->meta = meta;
|
|
||||||
}
|
|
||||||
|
|
||||||
MPIRecv::Recv() {}
|
|
||||||
|
|
||||||
bool MPIRecv::IsReady() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
MPIRecv::IsFinished() {}
|
|
||||||
|
|
||||||
MPIRecv::~MPIRecv() {
|
|
||||||
MPI_Free_mem(meta);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
} // namespace operators
|
|
||||||
} // namespace paddle
|
|
@ -1,83 +0,0 @@
|
|||||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License. */
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <mpi.h>
|
|
||||||
#include <map>
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace paddle {
|
|
||||||
namespace operators {
|
|
||||||
namespace detail {
|
|
||||||
class MPIUtils {
|
|
||||||
public:
|
|
||||||
MPIUtils(const std::string &worker_name);
|
|
||||||
|
|
||||||
const int GetRankID(const std::string &task_id);
|
|
||||||
|
|
||||||
private:
|
|
||||||
void InitMPI();
|
|
||||||
|
|
||||||
std::map<std::string, int> name_id_map;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Meta {
|
|
||||||
public:
|
|
||||||
int src;
|
|
||||||
int dst;
|
|
||||||
MPI_Datatype datatype;
|
|
||||||
char *request;
|
|
||||||
int count;
|
|
||||||
int tag;
|
|
||||||
int device;
|
|
||||||
};
|
|
||||||
|
|
||||||
class MPISend {
|
|
||||||
public:
|
|
||||||
MPISend(const Meta &meta);
|
|
||||||
|
|
||||||
bool IsFinished();
|
|
||||||
|
|
||||||
bool IsReady();
|
|
||||||
|
|
||||||
void Send();
|
|
||||||
|
|
||||||
~MPISend();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int done1_;
|
|
||||||
int done2_;
|
|
||||||
Meta *meta;
|
|
||||||
};
|
|
||||||
|
|
||||||
class MPIRecv {
|
|
||||||
public:
|
|
||||||
MPIRecv(const Meta &meta);
|
|
||||||
|
|
||||||
bool IsReady();
|
|
||||||
|
|
||||||
bool IsFinished();
|
|
||||||
|
|
||||||
void Recv();
|
|
||||||
|
|
||||||
~MPIRecv();
|
|
||||||
|
|
||||||
private:
|
|
||||||
int done1_;
|
|
||||||
int done2_;
|
|
||||||
Meta *meta;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
} // namespace operators
|
|
||||||
} // namespace paddle
|
|
Loading…
Reference in new issue