-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsuspend.py
More file actions
66 lines (47 loc) · 1.95 KB
/
suspend.py
File metadata and controls
66 lines (47 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
Copyright 2025 Huawei Technologies Co., Ltd.
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.
"""
import time
import taskr
NSUSPENDS = 100
def suspend(runtime, branchCount, taskCount):
# Allowing tasks to immediately resume upon suspension -- they won't execute until their pending operation is finished
runtime.setTaskCallbackHandler(taskr.TaskCallback.onTaskSuspend, lambda task : runtime.resumeTask(task))
def fc(task):
for _ in range(NSUSPENDS): task.suspend()
# Creating the execution units (functions that the tasks will run)
taskfc = taskr.Function(fc)
# Initializing taskr
runtime.initialize()
# Creating the execution units (functions that the tasks will run)
prevTask = None
for b in range(branchCount):
for i in range(taskCount):
task = taskr.Task(b * taskCount + i, taskfc)
# Creating dependencies
if i > 0: task.addDependency(prevTask)
# Adding to taskr
runtime.addTask(task)
# Setting as new previous task
prevTask = task
# Running taskr for the current repetition
startTime = time.time()
runtime.run()
runtime.wait()
endTime = time.time()
computeTime = endTime - startTime
print(f"Running Time: {computeTime:0.5f}s")
# Finalizing taskr
runtime.finalize()
# Overwrite the onTaskSuspend fc to be None such that runtime no longer has
# a dependency to the previous fc and runtime can call the destructor
runtime.setTaskCallbackHandler(taskr.TaskCallback.onTaskSuspend, None)