Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
PipelineAnalyzer.h
1// ============================================================
2// File: declarative/PipelineAnalyzer.h
3// Pipeline Compatibility Analyzer for auto-bridging
4// Sprint 7, Phase 3
5// ============================================================
6
7#pragma once
8
9#include <string>
10#include <vector>
11#include <map>
12#include <nlohmann/json.hpp>
13#include "declarative/PipelineDescription.h"
14#include "declarative/ModuleRegistry.h"
15#include "FrameMetadata.h"
16#include "ImageMetadata.h"
17
18namespace apra {
19
20// ============================================================
21// Bridge Types
22// ============================================================
23enum class BridgeType {
24 Memory, // HOST <-> CUDA_DEVICE (CudaMemCopy)
25 Format // Pixel format conversion (ColorConversion/CCNPPI)
26};
27
28// ============================================================
29// Memory Transfer Direction
30// ============================================================
31enum class MemoryDirection {
32 HostToDevice, // HOST -> CUDA_DEVICE
33 DeviceToHost // CUDA_DEVICE -> HOST
34};
35
36// ============================================================
37// BridgeSpec - Describes a bridge module to be inserted
38// ============================================================
39struct BridgeSpec {
40 std::string fromModule; // Source module ID
41 std::string toModule; // Target module ID
42 std::string fromPin; // Source output pin name
43 std::string toPin; // Target input pin name
44 BridgeType type; // MEMORY or FORMAT
45 std::string bridgeModule; // Module type (e.g., "CudaMemCopy", "ColorConversion")
46 nlohmann::json props; // Properties for bridge module
47
48 // For MEMORY bridges
50
51 // For FORMAT bridges
54};
55
56// ============================================================
57// Warning - Suboptimal pattern detected
58// ============================================================
59struct Warning {
60 std::string code; // Warning code (e.g., "W001")
61 std::string message; // Human-readable message
62 std::string moduleId; // Module causing the warning
63 std::string suggestion; // Suggested fix
64};
65
66// ============================================================
67// Suggestion - Alternative module recommendation
68// ============================================================
69struct Suggestion {
70 std::string currentModule; // Currently used module type
71 std::string suggestedModule; // Recommended replacement
72 std::string reason; // Why it's better
73 std::string moduleId; // Instance ID in pipeline
74};
75
76// ============================================================
77// Error - Incompatibility that cannot be bridged
78// ============================================================
80 std::string code; // Error code (e.g., "E001")
81 std::string message; // Human-readable message
82 std::string fromModule; // Source module
83 std::string toModule; // Target module
84 std::string details; // Additional details
85};
86
87// ============================================================
88// AnalysisResult - Complete analysis output
89// ============================================================
91 bool hasErrors = false; // True if there are incompatibilities
92 std::vector<AnalysisError> errors; // Frame type incompatibilities
93 std::vector<BridgeSpec> bridges; // Required bridges in insertion order
94 std::vector<Suggestion> suggestions; // Module replacement recommendations
95 std::vector<Warning> warnings; // Suboptimal pattern warnings
96
97 // Summary statistics
100};
101
102// ============================================================
103// ConnectionInfo - Information about a connection for analysis
104// ============================================================
106 std::string fromModuleId;
107 std::string toModuleId;
108 std::string fromPin;
109 std::string toPin;
110
111 // Source module info
112 std::string fromModuleType;
114 std::vector<std::string> fromFrameTypes;
115 std::vector<ImageMetadata::ImageType> fromImageTypes;
116
117 // Target module info
118 std::string toModuleType;
120 std::vector<std::string> toFrameTypes;
121 std::vector<ImageMetadata::ImageType> toImageTypes;
122};
123
124// ============================================================
125// PipelineAnalyzer - Analyzes pipeline for compatibility issues
126// ============================================================
128public:
129 PipelineAnalyzer() = default;
130
131 // Analyze a pipeline description and return results
132 AnalysisResult analyze(const PipelineDescription& pipeline) const;
133
134 // Analyze with explicit module registry (for testing)
136 const PipelineDescription& pipeline,
137 const ModuleRegistry& registry
138 ) const;
139
140private:
141 // Build connection info list from pipeline description
142 std::vector<ConnectionInfo> buildConnectionInfoList(
143 const PipelineDescription& pipeline,
144 const ModuleRegistry& registry
145 ) const;
146
147 // Check frame type compatibility
149 const ConnectionInfo& conn,
150 AnalysisResult& result
151 ) const;
152
153 // Check memory type compatibility and add bridge if needed
155 const ConnectionInfo& conn,
156 AnalysisResult& result
157 ) const;
158
159 // Check pixel format compatibility and add bridge if needed
161 const ConnectionInfo& conn,
162 FrameMetadata::MemType effectiveMemType, // After any memory bridge
163 AnalysisResult& result
164 ) const;
165
166 // Check for suboptimal patterns (CPU module in CUDA chain)
168 const PipelineDescription& pipeline,
169 const ModuleRegistry& registry,
170 AnalysisResult& result
171 ) const;
172
173 // Find output pin info for a module
175 const ModuleInfo* info,
176 const std::string& pinName
177 ) const;
178
179 // Find input pin info for a module
181 const ModuleInfo* info,
182 const std::string& pinName
183 ) const;
184
185 // Determine best bridge module for memory transfer
186 std::string selectMemoryBridgeModule(
189 ) const;
190
191 // Determine best bridge module for format conversion
192 std::string selectFormatBridgeModule(
194 ImageMetadata::ImageType fromFormat,
196 ) const;
197
198 // Generate unique bridge ID
199 std::string generateBridgeId(
200 const std::string& fromModule,
201 const std::string& toModule,
202 BridgeType type
203 ) const;
204};
205
206} // namespace apra
MemType
Definition FrameMetadata.h:58
@ HOST
Definition FrameMetadata.h:59
ImageType
Definition ImageMetadata.h:11
@ UNSET
Definition ImageMetadata.h:12
Definition ModuleRegistry.h:123
Definition PipelineAnalyzer.h:127
const ModuleInfo::PinInfo * findInputPin(const ModuleInfo *info, const std::string &pinName) const
Definition PipelineAnalyzer.cpp:391
std::string selectFormatBridgeModule(FrameMetadata::MemType memType, ImageMetadata::ImageType fromFormat, ImageMetadata::ImageType toFormat) const
Definition PipelineAnalyzer.cpp:462
const ModuleInfo::PinInfo * findOutputPin(const ModuleInfo *info, const std::string &pinName) const
Definition PipelineAnalyzer.cpp:371
std::vector< ConnectionInfo > buildConnectionInfoList(const PipelineDescription &pipeline, const ModuleRegistry &registry) const
Definition PipelineAnalyzer.cpp:72
bool checkFrameTypeCompatibility(const ConnectionInfo &conn, AnalysisResult &result) const
Definition PipelineAnalyzer.cpp:125
std::string selectMemoryBridgeModule(FrameMetadata::MemType from, FrameMetadata::MemType to) const
Definition PipelineAnalyzer.cpp:411
void checkForSuboptimalPatterns(const PipelineDescription &pipeline, const ModuleRegistry &registry, AnalysisResult &result) const
Definition PipelineAnalyzer.cpp:304
void checkMemoryTypeCompatibility(const ConnectionInfo &conn, AnalysisResult &result) const
Definition PipelineAnalyzer.cpp:178
std::string generateBridgeId(const std::string &fromModule, const std::string &toModule, BridgeType type) const
Definition PipelineAnalyzer.cpp:482
AnalysisResult analyze(const PipelineDescription &pipeline) const
Definition PipelineAnalyzer.cpp:17
void checkFormatCompatibility(const ConnectionInfo &conn, FrameMetadata::MemType effectiveMemType, AnalysisResult &result) const
Definition PipelineAnalyzer.cpp:246
Definition FrameTypeRegistrations.h:10
MemoryDirection
Definition PipelineAnalyzer.h:31
BridgeType
Definition PipelineAnalyzer.h:23
Definition PipelineAnalyzer.h:79
std::string details
Definition PipelineAnalyzer.h:84
std::string toModule
Definition PipelineAnalyzer.h:83
std::string code
Definition PipelineAnalyzer.h:80
std::string fromModule
Definition PipelineAnalyzer.h:82
std::string message
Definition PipelineAnalyzer.h:81
Definition PipelineAnalyzer.h:90
size_t formatBridgeCount
Definition PipelineAnalyzer.h:99
std::vector< BridgeSpec > bridges
Definition PipelineAnalyzer.h:93
std::vector< Suggestion > suggestions
Definition PipelineAnalyzer.h:94
std::vector< Warning > warnings
Definition PipelineAnalyzer.h:95
bool hasErrors
Definition PipelineAnalyzer.h:91
size_t memoryBridgeCount
Definition PipelineAnalyzer.h:98
std::vector< AnalysisError > errors
Definition PipelineAnalyzer.h:92
Definition PipelineAnalyzer.h:39
std::string fromPin
Definition PipelineAnalyzer.h:42
MemoryDirection memoryDirection
Definition PipelineAnalyzer.h:49
nlohmann::json props
Definition PipelineAnalyzer.h:46
BridgeType type
Definition PipelineAnalyzer.h:44
std::string fromModule
Definition PipelineAnalyzer.h:40
std::string toModule
Definition PipelineAnalyzer.h:41
ImageMetadata::ImageType toFormat
Definition PipelineAnalyzer.h:53
ImageMetadata::ImageType fromFormat
Definition PipelineAnalyzer.h:52
std::string toPin
Definition PipelineAnalyzer.h:43
std::string bridgeModule
Definition PipelineAnalyzer.h:45
Definition PipelineAnalyzer.h:105
std::string toModuleId
Definition PipelineAnalyzer.h:107
std::string fromModuleType
Definition PipelineAnalyzer.h:112
std::string fromModuleId
Definition PipelineAnalyzer.h:106
std::string toPin
Definition PipelineAnalyzer.h:109
FrameMetadata::MemType fromMemType
Definition PipelineAnalyzer.h:113
std::string fromPin
Definition PipelineAnalyzer.h:108
std::vector< std::string > toFrameTypes
Definition PipelineAnalyzer.h:120
FrameMetadata::MemType toMemType
Definition PipelineAnalyzer.h:119
std::vector< ImageMetadata::ImageType > toImageTypes
Definition PipelineAnalyzer.h:121
std::vector< std::string > fromFrameTypes
Definition PipelineAnalyzer.h:114
std::vector< ImageMetadata::ImageType > fromImageTypes
Definition PipelineAnalyzer.h:115
std::string toModuleType
Definition PipelineAnalyzer.h:118
Definition ModuleRegistry.h:48
Definition ModuleRegistry.h:41
Definition PipelineDescription.h:90
Definition PipelineAnalyzer.h:69
std::string suggestedModule
Definition PipelineAnalyzer.h:71
std::string reason
Definition PipelineAnalyzer.h:72
std::string currentModule
Definition PipelineAnalyzer.h:70
std::string moduleId
Definition PipelineAnalyzer.h:73
Definition PipelineAnalyzer.h:59
std::string moduleId
Definition PipelineAnalyzer.h:62
std::string message
Definition PipelineAnalyzer.h:61
std::string suggestion
Definition PipelineAnalyzer.h:63
std::string code
Definition PipelineAnalyzer.h:60