11#include < mutex>
2+ #include < thread>
23
34#include < deepx/tensorfunc/init.hpp>
45#include " deepx/op/op.hpp"
56#include " deepx/op/opfactory.hpp"
67#include " deepx/mem/mem.hpp"
78#include " client/udpserver.hpp"
8-
9+
910using namespace deepx ::tensorfunc;
1011using namespace deepx ::mem;
1112
@@ -18,38 +19,45 @@ int main()
1819 deepx::op::OpFactory opfactory;
1920 register_all (opfactory);
2021
21- server.func = [&mem, &opfactory, &memmutex](const char *buffer)->std ::string
22- {
23-
24-
25- deepx::op::Op op;
26- op.recv_at = chrono::system_clock::now ();
27- op.load (buffer);
28- std::string resp=to_string (op.id );
29- resp+=" recv_at:" ;
30- resp+=to_string (op.recv_at .time_since_epoch ().count ());
31- if (opfactory.ops .find (op.name )==opfactory.ops .end ()){
32- cout<<" <op> " <<op.name <<" not found" <<endl;
33- resp+=" error op not found" ;
34- }
35- auto &type_map = opfactory.ops .find (op.name )->second ;
36- if (type_map.find (op.dtype )==type_map.end ()){
37- cout<<" <op>" <<op.name <<" " <<op.dtype <<" not found" <<endl;
38- resp+=" error dtype not found" ;
39- }
40- auto src = type_map.find (op.dtype )->second ;
41-
42- (*src).init (op.name , op.dtype , op.args , op.returns , op.grad , op.args_grad , op.returns_grad );
43- memmutex.lock ();
44- if (op.grad ) {
45- (*src).backward (mem);
46- }else {
47- (*src).forward (mem);
22+ queue<deepx::op::Op> tasks;
23+ // 启动一个新线程来运行UDP服务器
24+ std::thread server_thread ([&server, &tasks]() {
25+ server.start (tasks);
26+ });
27+ // 分离线程,让它在后台运行
28+ server_thread.detach ();
29+
30+ while (true ) {
31+ if (!tasks.empty ()) {
32+ deepx::op::Op op = tasks.front ();
33+ tasks.pop ();
34+
35+ std::string resp=to_string (op.id );
36+ resp+=" recv_at:" ;
37+ resp+=to_string (op.recv_at .time_since_epoch ().count ());
38+ if (opfactory.ops .find (op.name )==opfactory.ops .end ()){
39+ cout<<" <op> " <<op.name <<" not found" <<endl;
40+ resp+=" error op not found" ;
41+ }
42+ auto &type_map = opfactory.ops .find (op.name )->second ;
43+ if (type_map.find (op.dtype )==type_map.end ()){
44+ cout<<" <op>" <<op.name <<" " <<op.dtype <<" not found" <<endl;
45+ resp+=" error dtype not found" ;
46+ }
47+ auto src = type_map.find (op.dtype )->second ;
48+
49+ (*src).init (op.name , op.dtype , op.args , op.returns , op.grad , op.args_grad , op.returns_grad );
50+ memmutex.lock ();
51+ if (op.grad ) {
52+ (*src).backward (mem);
53+ }else {
54+ (*src).forward (mem);
55+ }
56+ memmutex.unlock ();
57+ resp+=" success" ;
58+ server.resp (resp);
4859 }
49- memmutex.unlock ();
50- resp+=" success" ;
51- return resp;
52- };
53- server.start ();
60+ }
61+
5462 return 0 ;
5563}
0 commit comments