{"id":3784,"date":"2026-04-13T13:26:07","date_gmt":"2026-04-13T17:26:07","guid":{"rendered":"https:\/\/blogs.sw.siemens.com\/calibre\/?p=3784"},"modified":"2026-04-13T13:26:09","modified_gmt":"2026-04-13T17:26:09","slug":"why-a-gpu-rasterizer-matters-for-computational-lithography-in-both-performance-and-precision-at-scale","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/calibre\/2026\/04\/13\/why-a-gpu-rasterizer-matters-for-computational-lithography-in-both-performance-and-precision-at-scale\/","title":{"rendered":"Why a GPU rasterizer matters for computational lithography in both performance and precision at scale"},"content":{"rendered":"\n<p>By Loay Hegazy, Mohamed Taher, Sherif Hammouda<\/p>\n\n\n\n<p>Rasterization\u2014converting continuous geometric shapes into discrete pixel grids\u2014is fundamental to <strong><a href=\"https:\/\/www.siemens.com\/en-us\/products\/ic\/calibre-manufacturing\/computational-lithography\/\" target=\"_blank\" rel=\"noreferrer noopener\">computational lithography<\/a><\/strong>. In optical proximity correction (OPC) and mask synthesis workflows, rasterization must achieve both speed and nanometer-scale precision.<\/p>\n\n\n\n<p>Watch now (3 min): <strong><a href=\"https:\/\/resources.sw.siemens.com\/en-US\/video-reshaping-the-lithography-industry-with-calibre-advanced-opc-solutions\/\" target=\"_blank\" rel=\"noreferrer noopener\">Reshaping the lithography industry with Calibre Advanced OPC Solutions<\/a><\/strong><\/p>\n\n\n\n<p>Traditional CPU-based rasterizers process workloads sequentially, creating a bottleneck in the design cycle. GPUs offer massive parallelism, but applying them to lithography rasterization presents challenges: maintaining floating-point precision, preserving sub-pixel connectivity and handling irregular memory access patterns.<\/p>\n\n\n\n<p>Based on originally presented at <a href=\"https:\/\/sc25.supercomputing.org\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>SC25<\/strong><\/a>, the international conference for high performance computing, networking, storage and analysis, we describe a GPU rasterizer designed specifically for computational lithography, and present benchmark results and practical implications for mask synthesis workflows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fractional pixel coverage: the lithography rasterization challenge<\/h2>\n\n\n\n<p>Rasterization in graphics typically uses a binary coverage model: pixels are either fully covered or not. This suffices for visual rendering, but lithography demands fractional pixel coverage (figure 1). Light intensity and resist behavior depend on the precise area of each pixel occupied by a polygon\u2014a requirement that becomes critical at nanometer scales.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"419\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig1-rasterization-1024x419.jpg\" alt=\"An image showing the conversion of a solid black parallelogram on a grid into a pixel-based representation. An arrow points from the smooth parallelogram to a pixelated version, where some pixels are fully black, and boundary pixels are shaded in varying degrees of gray to represent fractional coverage\" class=\"wp-image-3785\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig1-rasterization-1024x419.jpg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig1-rasterization-600x246.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig1-rasterization-768x315.jpg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig1-rasterization-900x369.jpg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig1-rasterization.jpg 1450w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figure 1. Example of converting a polygon into a pixel-based representation through rasterization<\/figcaption><\/figure>\n\n\n\n<p>Consider a polygon edge that crosses a pixel diagonally. A binary model would assign the pixel fully to one polygon or the other, introducing a 50% error in coverage. A fractional model computes the exact overlap area, capturing the physics of the lithographic process. For thin features and sub-wavelength structures, this precision directly impacts manufacturability.<\/p>\n\n\n\n<p>The challenge is computing fractional coverage for billions of pixels while maintaining connectivity between sub-pixel geometries\u2014ensuring that thin features do not fragment into disconnected regions during pixelization.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">GPU rasterizer algorithm: five-stage parallel architecture<\/h2>\n\n\n\n<p>Our GPU rasterizer decomposes the problem into five sequential stages, each designed for parallel execution on thousands of GPU threads.<\/p>\n\n\n\n<p><strong>Stage 1: Initialization and polygon assignment<\/strong><\/p>\n\n\n\n<p>The algorithm begins by zeroing all pixels in the output grid and reserving shared memory for polygon data. Polygons are assigned to thread blocks based on spatial location, enabling simultaneous processing of multiple polygons across the GPU.<\/p>\n\n\n\n<p>A coarse-grained bounding box approach identifies which polygons might overlap specific regions. This pruning step is essential: it prevents threads from evaluating pixel-polygon pairs that cannot possibly intersect, reducing wasted computation.<\/p>\n\n\n\n<p><strong>Stage 2: Bounding box calculation<\/strong><\/p>\n\n\n\n<p>For each assigned polygon, a precise bounding box is computed from vertex coordinates. This defines the minimal region requiring detailed rasterization, limiting computation to relevant pixels.<\/p>\n\n\n\n<p>The bounding box approach introduces a tradeoff: it may include extra area outside the polygon (as shown in figure 2), creating a collision zone that requires additional processing. However, this overhead is acceptable because it enables efficient spatial pruning and coalesced memory access.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"655\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig2-bounding-box-1024x655.jpg\" alt=\"A diagram illustrating an irregular five-sided polygon enclosed within a dashed rectangular bounding box\" class=\"wp-image-3786\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig2-bounding-box-1024x655.jpg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig2-bounding-box-600x384.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig2-bounding-box-768x492.jpg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig2-bounding-box-900x576.jpg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig2-bounding-box.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figure 2. Example of computing bounding box for a polygon<\/figcaption><\/figure>\n\n\n\n<p><strong>Stage 3: Thread-pixel allocation<\/strong><\/p>\n\n\n\n<p>GPU threads are dynamically allocated to individual pixels or small groups of pixels within each polygon&#8217;s bounding box. This fine-grained parallelism is the key to GPU efficiency. Each thread independently determines its pixel&#8217;s contribution to coverage, with minimal inter-thread synchronization.<\/p>\n\n\n\n<p>A fixed-size thread block processes pixels in segments, scanning the bounding box in a coalesced memory access pattern. For example, a 1D thread block of 4 threads processes the first 4 pixels, then shifts to the next 4, continuing until the entire bounding box is scanned (figure 3). This pattern maximizes memory bandwidth utilization, a critical factor for GPU performance.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"532\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig3-output-grid-rasterization-1024x532.jpg\" alt=\"A two-part image showing the rasterization of an L-shaped polygon. The left side shows an 8x8 grid with a bounding box around an L-shaped polygon. Above the polygon are boxes that represent thread blocks\" class=\"wp-image-3787\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig3-output-grid-rasterization-1024x532.jpg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig3-output-grid-rasterization-600x311.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig3-output-grid-rasterization-768x399.jpg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig3-output-grid-rasterization-1536x797.jpg 1536w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig3-output-grid-rasterization-900x467.jpg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig3-output-grid-rasterization.jpg 1828w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figure 3. Example on output grid for rasterization of a simple L-shape using a block of threads<\/figcaption><\/figure>\n\n\n\n<p><strong>Stage 4: Pixel classification<\/strong><\/p>\n\n\n\n<p>For each pixel, the algorithm classifies it as inside, outside, or on the boundary of the polygon:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Outside pixels<\/strong>&nbsp;remain at their initialized value of zero.<\/li>\n\n\n\n<li><strong>Inside pixels<\/strong>&nbsp;are set to 1.0, indicating full coverage.<\/li>\n\n\n\n<li><strong>Boundary pixels<\/strong>&nbsp;require detailed computation. The polygon edge intersecting the pixel is analyzed to calculate the trapezoidal area formed by the edge and pixel boundary. This area, computed using floating-point arithmetic, represents the fractional coverage.<\/li>\n<\/ul>\n\n\n\n<p><strong>Stage 5: Atomic operations and connectivity preservation<\/strong><\/p>\n\n\n\n<p>When multiple polygons overlap a single pixel, atomic operations ensure correct accumulation of coverage values, a crucial capability for achieving nanometer-scale accuracy and smooth sub-pixel rendering. Our algorithm uses floating-point atomics to handle concurrent writes from different thread blocks, maintaining precision and preventing data races conditions.<\/p>\n\n\n\n<p>Connectivity preservation is achieved through careful handling of sub-pixel geometries. By computing exact fractional coverage rather than rounding to binary coverage, the algorithm prevents thin features from fragmenting during rasterization.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">NVIDIA CUDA implementation and memory optimization<\/h2>\n\n\n\n<p>The implementation targets NVIDIA CUDA, leveraging GPU architecture for performance:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Memory optimization:<\/strong>&nbsp;Polygon vertices and edges are stored in data structures designed for coalesced memory access. Shared memory is reserved for the polygon with the maximum vertex count, minimizing global memory latency for frequently accessed data.<\/li>\n\n\n\n<li><strong>Kernel design:<\/strong>&nbsp;Multiple CUDA kernels handle distinct pipeline stages. One kernel computes bounding boxes; another performs pixel classification and coverage calculation. This modular design allows independent optimization of each stage.<\/li>\n\n\n\n<li><strong>Load balancing:<\/strong>&nbsp;Dynamic load balancing mechanisms ensure GPU cores remain busy despite irregular polygon distributions. Work queues and adaptive thread allocation distribute computation evenly across the GPU.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">GPU rasterization benchmark results: 290x speedup for Manhattan shapes<\/h2>\n\n\n\n<p>The GPU rasterizer was evaluated on NVIDIA H100 GPUs against highly optimized CPU implementations. Test cases included both Manhattan (rectilinear) and curvilinear polygon datasets.<\/p>\n\n\n\n<p><strong>Manhattan geometries<\/strong><\/p>\n\n\n\n<p>For Manhattan shapes\u2014axis-aligned polygons common in standard cell layouts and routing layers\u2014the GPU rasterizer achieved&nbsp;<strong>speedups up to 290x<\/strong>&nbsp;compared to CPU implementations, as shown in figure 4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"627\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig4-manhattan-results-1024x627.jpg\" alt=\"Bar chart comparing CPU and GPU runtimes for different CPU:GPU configurations. For all configurations, GPU time is significantly lower than CPU time\" class=\"wp-image-3788\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig4-manhattan-results-1024x627.jpg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig4-manhattan-results-600x367.jpg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig4-manhattan-results-768x470.jpg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig4-manhattan-results-1536x941.jpg 1536w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig4-manhattan-results-900x551.jpg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig4-manhattan-results.jpg 1538w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figure 4. CPU and GPU runtimes for Manhattan datasets. GPU achieved large speedups with pixel errors under 1% against CPU results<\/figcaption><\/figure>\n\n\n\n<p>This substantial acceleration reflects the regularity of Manhattan geometries.<\/p>\n\n\n\n<p><strong>Curvilinear geometries<\/strong><\/p>\n\n\n\n<p>For curvilinear shapes\u2014arbitrary polygons with non-axis-aligned edges\u2014the GPU rasterizer delivered&nbsp;<strong>speedups up to 45x<\/strong>, as shown in figure 5.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"627\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig5-curvilinear-results-1024x627.jpeg\" alt=\"A bar chart comparing CPU and GPU runtimes in milliseconds (log scale) for different CPU:GPU configurations. Light blue bars represent CPU time and orange bars represent GPU time. For all configurations, GPU time is significantly lower than CPU time\" class=\"wp-image-3789\" srcset=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig5-curvilinear-results-1024x627.jpeg 1024w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig5-curvilinear-results-600x367.jpeg 600w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig5-curvilinear-results-768x470.jpeg 768w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig5-curvilinear-results-1536x941.jpeg 1536w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig5-curvilinear-results-900x551.jpeg 900w, https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/fig5-curvilinear-results.jpeg 1540w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Figure 5. CPU and GPU runtimes for curvilinear datasets. GPU achieved large speedups with pixel errors under 1% against CPU results<\/figcaption><\/figure>\n\n\n\n<p>The lower speedup compared to Manhattan geometries reflects increased computational complexity: evaluating whether a pixel lies inside a curvilinear polygon requires more arithmetic operations and edge equations are more complex. However, 45x acceleration remains substantial and demonstrates that GPU rasterization is effective even for intricate geometries.<\/p>\n\n\n\n<p><strong>Accuracy<\/strong><\/p>\n\n\n\n<p>Across all test cases, the GPU rasterizer achieved&nbsp;<strong>less than 1% absolute error<\/strong>&nbsp;compared to reference CPU calculations. This low error rate confirms that aggressive parallelization does not compromise precision\u2014a critical requirement for nanometer-scale manufacturing.<\/p>\n\n\n\n<p>The error analysis validates the floating-point approach: despite the complexity of parallel atomic operations and rounding in floating-point arithmetic, the algorithm maintains accuracy within acceptable tolerances for lithography simulation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Practical benefits: GPU rasterization in OPC workflows<\/h2>\n\n\n\n<p>The performance gains translate directly to reduced turnaround time in OPC and mask synthesis:<\/p>\n\n\n\n<p><strong>Iteration speed:<\/strong>&nbsp;OPC is inherently iterative. Engineers adjust polygon edges, re-rasterize, simulate and analyze results. A 45\u2013290x speedup in rasterization reduces the cycle time for each iteration, enabling more design variations to be explored within fixed time windows.<\/p>\n\n\n\n<p><strong>Scalability:<\/strong>&nbsp;Modern masks contain millions of polygons. The GPU rasterizer&#8217;s parallel architecture scales with polygon count and raster resolution, maintaining performance as designs grow in complexity.<\/p>\n\n\n\n<p><strong>Precision preservation:<\/strong>&nbsp;The &lt;1% error rate ensures that GPU-accelerated rasterization can replace CPU implementations without sacrificing accuracy. This is essential for adoption in production workflows, where mask fidelity directly impacts yield.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Limitations and future directions for GPU rasterization deployment<\/h2>\n\n\n\n<p>While the benchmark results are compelling, several practical constraints merit consideration before deploying GPU rasterization in production. GPU memory is finite, and very large rasters or polygon datasets may exceed available capacity, necessitating tiling or out-of-core processing strategies that introduce additional complexity and potential performance overhead.<\/p>\n\n\n\n<p>The performance advantage also varies with geometry type. Designs with high curvilinear content\u2014increasingly common in advanced nodes\u2014will see lower acceleration, potentially limiting the benefit for certain mask types.<\/p>\n\n\n\n<p>Additionally, the benchmarks measure rasterization time in isolation, which does not account for integration overhead in complete workflows. Data movement between CPU and GPU, kernel launch overhead and synchronization with other OPC tasks can reduce effective speedup when the GPU rasterizer is embedded in a larger design flow.<\/p>\n\n\n\n<p>We identify several avenues for future work, including integration into existing OPC and mask synthesis tools, combining CPU and GPU processing and extending rasterization for advance lithography and 3D ICs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion: Making\u00a0GPU Rasterizer\u00a0the Standard for Advanced Node Mask Synthesis<\/h2>\n\n\n\n<p>This work demonstrates that GPU acceleration is viable for computational lithography rasterization, achieving 290x speedup for Manhattan geometries and 45x for curvilinear shapes while maintaining &lt;1% error. The GPU-friendly algorithm\u2014combining bounding box pruning, fine-grained thread allocation and floating-point precision\u2014addresses the core challenges of parallelizing rasterization.<\/p>\n\n\n\n<p>For IC manufacturers, the practical implication is clear: GPU-accelerated rasterization can significantly reduce OPC turnaround time without sacrificing mask accuracy. As GPU hardware continues to evolve and integration into production tools matures, this approach is likely to become standard in advanced node mask synthesis.<\/p>\n\n\n\n<p>The work also highlights the importance of algorithm design for GPU execution. Naive parallelization often fails; success requires careful attention to memory access patterns, load balancing and precision. This lesson extends beyond rasterization to other computationally intensive EDA tasks.<\/p>\n\n\n\n<p><strong>Ready to accelerate your mask synthesis?<\/strong> Siemens EDA&#8217;s GPU-powered OPC solution is available now. Learn more in our technical paper, <a href=\"https:\/\/resources.sw.siemens.com\/en-US\/technical-paper-a-massively-parallel-gpu-rasterizer-for-next-generation-computational\/\" target=\"_blank\" rel=\"noreferrer noopener\">A massively parallel GPU rasterizer for next-generation computational lithography.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This technical analysis explores GPU rasterizer for accelerated mask synthesis. Benchmarks show 290x speedup for Manhattan geometries and 45x for curvilinear shapes with <1% error.\n<\/p>\n","protected":false},"author":71645,"featured_media":3790,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spanish_translation":"","french_translation":"","german_translation":"","italian_translation":"","polish_translation":"","japanese_translation":"","chinese_translation":"","footnotes":""},"categories":[1],"tags":[957,967,968,969,964],"industry":[],"product":[90],"coauthors":[712],"class_list":["post-3784","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-computational-lithography","tag-gpu-rasterizer","tag-mask-synthesis","tag-parallel-processing","tag-semiconductor-manufacturing","product-calibre"],"featured_image_url":"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/50\/2026\/04\/BlogHero-chart-GPU-results-900x414-1.jpeg","_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/posts\/3784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/users\/71645"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/comments?post=3784"}],"version-history":[{"count":1,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/posts\/3784\/revisions"}],"predecessor-version":[{"id":3791,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/posts\/3784\/revisions\/3791"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/media\/3790"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/media?parent=3784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/categories?post=3784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/tags?post=3784"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/industry?post=3784"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/product?post=3784"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/calibre\/wp-json\/wp\/v2\/coauthors?post=3784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}