Skip to content

Commit c0bcf09

Browse files
authored
Share threadpool framework between xnnpack and optimized kernels (#11194)
1 parent 1a27c14 commit c0bcf09

File tree

3 files changed

+53
-38
lines changed

3 files changed

+53
-38
lines changed

Package.swift

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919

2020
import PackageDescription
2121

22-
let debug = "_debug"
23-
let deliverables = [
22+
let debug_suffix = "_debug"
23+
let dependencies_suffix = "_with_dependencies"
24+
25+
let products = [
2426
"backend_coreml": [
2527
"frameworks": [
2628
"Accelerate",
@@ -37,49 +39,64 @@ let deliverables = [
3739
"MetalPerformanceShadersGraph",
3840
],
3941
],
40-
"backend_xnnpack": [:],
41-
"executorch": [:],
42+
"backend_xnnpack": [
43+
"targets": [
44+
"threadpool",
45+
],
46+
],
47+
"executorch": [
48+
"libraries": [
49+
"c++",
50+
],
51+
],
4252
"kernels_custom": [:],
43-
"kernels_optimized": [:],
53+
"kernels_optimized": [
54+
"frameworks": [
55+
"Accelerate",
56+
],
57+
"targets": [
58+
"threadpool",
59+
],
60+
],
4461
"kernels_portable": [:],
4562
"kernels_quantized": [:],
4663
].reduce(into: [String: [String: Any]]()) {
4764
$0[$1.key] = $1.value
48-
$0[$1.key + debug] = $1.value
49-
}.reduce(into: [String: [String: Any]]()) {
50-
var newValue = $1.value
51-
if $1.key.hasSuffix(debug) {
52-
$1.value.forEach { key, value in
53-
if key.hasSuffix(debug) {
54-
newValue[String(key.dropLast(debug.count))] = value
55-
}
56-
}
57-
}
58-
$0[$1.key] = newValue.filter { key, _ in !key.hasSuffix(debug) }
65+
$0[$1.key + debug_suffix] = $1.value
5966
}
6067

68+
let targets = [
69+
"threadpool",
70+
].flatMap { [$0, $0 + debug_suffix] }
71+
6172
let package = Package(
6273
name: "executorch",
6374
platforms: [
6475
.iOS(.v17),
6576
.macOS(.v10_15),
6677
],
67-
products: deliverables.keys.map { key in
68-
.library(name: key, targets: ["\(key)_dependencies"])
78+
products: products.keys.map { key in
79+
.library(name: key, targets: ["\(key)\(dependencies_suffix)"])
6980
}.sorted { $0.name < $1.name },
70-
targets: deliverables.flatMap { key, value -> [Target] in
81+
targets: targets.map { key in
82+
.binaryTarget(
83+
name: key,
84+
path: "cmake-out/\(key).xcframework"
85+
)
86+
} + products.flatMap { key, value -> [Target] in
7187
[
7288
.binaryTarget(
7389
name: key,
7490
path: "cmake-out/\(key).xcframework"
7591
),
7692
.target(
77-
name: "\(key)_dependencies",
78-
dependencies: [.target(name: key)],
93+
name: "\(key)\(dependencies_suffix)",
94+
dependencies:([key] +
95+
(value["targets"] as? [String] ?? []).map {
96+
target in key.hasSuffix(debug_suffix) ? target + debug_suffix : target
97+
}).map { .target(name: $0) },
7998
path: ".Package.swift/\(key)",
80-
linkerSettings: [
81-
.linkedLibrary("c++")
82-
] +
99+
linkerSettings:
83100
(value["frameworks"] as? [String] ?? []).map { .linkedFramework($0) } +
84101
(value["libraries"] as? [String] ?? []).map { .linkedLibrary($0) }
85102
),
@@ -88,18 +105,17 @@ let package = Package(
88105
.testTarget(
89106
name: "tests",
90107
dependencies: [
91-
.target(name: "executorch_debug"),
92-
.target(name: "kernels_portable"),
108+
.target(name: "executorch\(debug_suffix)"),
109+
.target(name: "kernels_optimized\(dependencies_suffix)"),
93110
],
94111
path: "extension/apple/ExecuTorch/__tests__",
95112
resources: [
96-
.copy("resources/add.pte")
113+
.copy("resources/add.pte"),
97114
],
98115
linkerSettings: [
99-
.linkedLibrary("c++"),
100116
.unsafeFlags([
101117
"-Xlinker", "-force_load",
102-
"-Xlinker", "cmake-out/kernels_portable.xcframework/macos-arm64/libkernels_portable_macos.a",
118+
"-Xlinker", "cmake-out/kernels_optimized.xcframework/macos-arm64/libkernels_optimized_macos.a",
103119
])
104120
]
105121
)

extension/benchmark/apple/Benchmark/Benchmark.xcodeproj/project.pbxproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
03F181542D7262FC0058BDF9 /* executorch in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181532D7262FC0058BDF9 /* executorch */; };
2626
03F181562D7262FC0058BDF9 /* kernels_custom in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181552D7262FC0058BDF9 /* kernels_custom */; };
2727
03F181582D7262FC0058BDF9 /* kernels_optimized in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181572D7262FC0058BDF9 /* kernels_optimized */; };
28-
03F1815A2D7262FC0058BDF9 /* kernels_portable in Frameworks */ = {isa = PBXBuildFile; productRef = 03F181592D7262FC0058BDF9 /* kernels_portable */; };
2928
03F1815C2D7262FC0058BDF9 /* kernels_quantized in Frameworks */ = {isa = PBXBuildFile; productRef = 03F1815B2D7262FC0058BDF9 /* kernels_quantized */; };
3029
30AA4B602DC0766800B1BE50 /* pcre2_regex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 30AA4B5A2DC0766800B1BE50 /* pcre2_regex.cpp */; };
3130
30AA4B612DC0766800B1BE50 /* regex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 30AA4B5D2DC0766800B1BE50 /* regex.cpp */; };
@@ -126,7 +125,6 @@
126125
03F1814E2D7262FC0058BDF9 /* backend_coreml in Frameworks */,
127126
03F181522D7262FC0058BDF9 /* backend_xnnpack in Frameworks */,
128127
03F181562D7262FC0058BDF9 /* kernels_custom in Frameworks */,
129-
03F1815A2D7262FC0058BDF9 /* kernels_portable in Frameworks */,
130128
03F181582D7262FC0058BDF9 /* kernels_optimized in Frameworks */,
131129
);
132130
runOnlyForDeploymentPostprocessing = 0;
@@ -741,10 +739,6 @@
741739
isa = XCSwiftPackageProductDependency;
742740
productName = kernels_optimized;
743741
};
744-
03F181592D7262FC0058BDF9 /* kernels_portable */ = {
745-
isa = XCSwiftPackageProductDependency;
746-
productName = kernels_portable;
747-
};
748742
03F1815B2D7262FC0058BDF9 /* kernels_quantized */ = {
749743
isa = XCSwiftPackageProductDependency;
750744
productName = kernels_quantized;

scripts/build_apple_frameworks.sh

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ libextension_module.a,\
3232
libextension_tensor.a,\
3333
:$HEADERS_RELATIVE_PATH:ExecuTorch"
3434

35+
FRAMEWORK_THREADPOOL="threadpool:\
36+
libcpuinfo.a,\
37+
libextension_threadpool.a,\
38+
libpthreadpool.a,\
39+
:"
40+
3541
FRAMEWORK_BACKEND_COREML="backend_coreml:\
3642
libcoreml_util.a,\
3743
libcoreml_inmemoryfs.a,\
@@ -44,9 +50,6 @@ libmpsdelegate.a,\
4450

4551
FRAMEWORK_BACKEND_XNNPACK="backend_xnnpack:\
4652
libXNNPACK.a,\
47-
libcpuinfo.a,\
48-
libextension_threadpool.a,\
49-
libpthreadpool.a,\
5053
libxnnpack_backend.a,\
5154
libmicrokernels-prod.a,\
5255
:"
@@ -59,6 +62,7 @@ FRAMEWORK_KERNELS_OPTIMIZED="kernels_optimized:\
5962
libcpublas.a,\
6063
liboptimized_kernels.a,\
6164
liboptimized_native_cpu_ops_lib.a,\
65+
libportable_kernels.a,\
6266
:"
6367

6468
FRAMEWORK_KERNELS_PORTABLE="kernels_portable:\
@@ -230,6 +234,7 @@ for mode in "${MODES[@]}"; do
230234
done
231235

232236
append_framework_flag "" "$FRAMEWORK_EXECUTORCH" "$mode"
237+
append_framework_flag "" "$FRAMEWORK_THREADPOOL" "$mode"
233238
append_framework_flag "EXECUTORCH_BUILD_COREML" "$FRAMEWORK_BACKEND_COREML" "$mode"
234239
append_framework_flag "EXECUTORCH_BUILD_MPS" "$FRAMEWORK_BACKEND_MPS" "$mode"
235240
append_framework_flag "EXECUTORCH_BUILD_XNNPACK" "$FRAMEWORK_BACKEND_XNNPACK" "$mode"

0 commit comments

Comments
 (0)