Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jerrrrry
infinilm
Commits
9c4020a4
Commit
9c4020a4
authored
Dec 06, 2025
by
PanZezhong
Browse files
issue/92 将run改为异步
parent
3d328d61
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
14 deletions
+24
-14
csrc/engine/infer_engine.cpp
csrc/engine/infer_engine.cpp
+4
-0
csrc/engine/rank_worker.cpp
csrc/engine/rank_worker.cpp
+16
-12
csrc/engine/rank_worker.hpp
csrc/engine/rank_worker.hpp
+4
-2
No files found.
csrc/engine/infer_engine.cpp
View file @
9c4020a4
...
...
@@ -39,6 +39,10 @@ infinicore::Tensor InferEngine::generate(const infinicore::Tensor &input_ids,
for
(
auto
&
worker
:
workers_
)
{
worker
->
run
(
std
::
vector
<
std
::
any
>
({
input_ids
,
position_ids
}));
}
// Wait for all workers
for
(
auto
&
worker
:
workers_
)
{
worker
->
wait
();
}
return
workers_
[
0
]
->
get_output
();
}
...
...
csrc/engine/rank_worker.cpp
View file @
9c4020a4
...
...
@@ -75,28 +75,32 @@ void RankWorker::load_param(const std::string &name,
}
//------------------------------------------------------
// run -- synchronous
(blocks until worker finishes forward)
// run --
a
synchronous
//------------------------------------------------------
void
RankWorker
::
run
(
const
std
::
vector
<
std
::
any
>
&
args
)
{
{
std
::
lock_guard
<
std
::
mutex
>
lock
(
mutex_
);
if
(
should_exit_
)
{
throw
std
::
runtime_error
(
"RankWorker is closing; cannot run"
);
}
std
::
lock_guard
<
std
::
mutex
>
lock
(
mutex_
);
pending_args_
=
args
;
job_cmd_
=
Command
::
RUN
;
has_job_
=
true
;
job_done_
=
false
;
if
(
should_exit_
)
{
throw
std
::
runtime_error
(
"RankWorker is closing; cannot run"
);
}
pending_args_
=
args
;
job_cmd_
=
Command
::
RUN
;
has_job_
=
true
;
job_done_
=
false
;
cv_
.
notify_all
();
}
// Wait for job completion
//------------------------------------------------------
// wait -- asynchronous
//------------------------------------------------------
void
RankWorker
::
wait
()
{
std
::
unique_lock
<
std
::
mutex
>
lk
(
mutex_
);
cv_
.
wait
(
lk
,
[
&
]
{
return
job_done_
||
should_exit_
;
});
if
(
should_exit_
)
{
throw
std
::
runtime_error
(
"RankWorker stopped
while running
"
);
throw
std
::
runtime_error
(
"RankWorker stopped
during run
"
);
}
}
...
...
csrc/engine/rank_worker.hpp
View file @
9c4020a4
...
...
@@ -28,10 +28,12 @@ public:
void
load_param
(
const
std
::
string
&
name
,
const
infinicore
::
Tensor
&
param
);
// Submit a run (forward) job and wait until completion.
// The result can be retrieved with get_output().
// Submit a run (forward) job.
void
run
(
const
std
::
vector
<
std
::
any
>
&
args
);
// Wait until run job completes. The result can be retrieved with get_output().
void
wait
();
// Request worker shutdown and join the thread.
void
close
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment