diff --git a/Examples/cuda_sum_vec.cu b/Examples/cuda_sum_vec.cu new file mode 100644 index 0000000000000000000000000000000000000000..a5dc39eb821af6f43e6fed08ec8ec6770e16d201 --- /dev/null +++ b/Examples/cuda_sum_vec.cu @@ -0,0 +1,83 @@ +#include <iostream> +#include <vector> + +constexpr size_t kVecSize = 100000; + +__device__ constexpr size_t getIdx() { + return blockDim.x * blockIdx.x + threadIdx.x; +} + +__global__ void sumVectors(float *a, float *b, float *c) { + size_t idx = getIdx(); + if (idx < kVecSize) { + c[idx] = a[idx] + b[idx]; + } +} + +int main() { + constexpr size_t kBytes = sizeof(float) * kVecSize; + + // Host initialization + float *host_vec_a = nullptr; + float *host_vec_b = nullptr; + float *host_vec_c = nullptr; + cudaMallocHost(&host_vec_a, kBytes); + cudaMallocHost(&host_vec_b, kBytes); + cudaMallocHost(&host_vec_c, kBytes); + + for (size_t i = 0; i < kVecSize; i++) { + host_vec_a[i] = static_cast<float>(i); + host_vec_b[i] = 2.0 * static_cast<float>(i); + } + + // Device initialization + float *dev_vec_a = nullptr; + float *dev_vec_b = nullptr; + float *dev_vec_c = nullptr; + cudaMalloc(&dev_vec_a, kBytes); + cudaMalloc(&dev_vec_b, kBytes); + cudaMalloc(&dev_vec_c, kBytes); + + // Copy host vectors on device + cudaMemcpy(dev_vec_a, host_vec_a, kBytes, cudaMemcpyHostToDevice); + cudaMemcpy(dev_vec_b, host_vec_b, kBytes, cudaMemcpyHostToDevice); + + // Compute device execution parameters + constexpr size_t kThreadPerBlock = 256; + constexpr size_t kBlockPerGrid = kVecSize / kThreadPerBlock + ((kVecSize % kThreadPerBlock) != 0 ? 1 : 0); + + // Run kernel + sumVectors<<<kBlockPerGrid, kThreadPerBlock>>>(dev_vec_a, + dev_vec_b, + dev_vec_c); + + // Get back the resulting vector to host + cudaMemcpy(host_vec_c, dev_vec_c, kBytes, cudaMemcpyDeviceToHost); + + constexpr float tol = 1e-5; + bool is_correct = true; + for (size_t i = 0; i < kVecSize; i++) { + float expected = 3.0 * static_cast<float>(i); + if (std::abs(host_vec_c[i] - expected) > tol) { + is_correct = false; + break; + } + } + std::cout << "The sum of the two vector is "; + if (is_correct) { + std::cout << "correct"; + } else { + std::cout << "wrong"; + } + std::cout << std::endl; + + // Host cleanup + cudaFreeHost(host_vec_a); + cudaFreeHost(host_vec_b); + cudaFreeHost(host_vec_c); + + // Device cleanup + cudaFree(dev_vec_a); + cudaFree(dev_vec_b); + cudaFree(dev_vec_c); +} \ No newline at end of file diff --git a/Examples/makefile b/Examples/makefile index 500779bd58195143e36a4158f42e09425a273956..c613d8094c971be3603ea8f58cd506f16d16d23a 100644 --- a/Examples/makefile +++ b/Examples/makefile @@ -5,13 +5,16 @@ FLAGS=--std=c++20 -stdpar=gpu INCLUDES_WARNINGS:=--diag_suppress useless_using_declaration -all: artefacts/future +all: artefacts/future artefacts/cuda_sum_vec -artefacts/future: artefacts/future.o +artefacts/%: artefacts/%.o $(CC) $(FLAGS) $^ -o $@ artefacts/%.o: %.cpp $(CC) $(FLAGS) $(INCLUDES_WARNINGS) -c $^ -o $@ +artefacts/%.o: %.cu + $(CC) $(FLAGS) $(INCLUDES_WARNINGS) -c $^ -o $@ + clean: rm -vf artefacts/** \ No newline at end of file diff --git a/GPGPU.typ b/GPGPU.typ new file mode 100644 index 0000000000000000000000000000000000000000..6050f240c09e9c918defc66cde66a0973ab5c9b6 --- /dev/null +++ b/GPGPU.typ @@ -0,0 +1,101 @@ +// https://polylux.dev/book/polylux.html +// https://typst.app/docs +#import "@preview/polylux:0.3.1": * +#import themes.metropolis : * + +#show: metropolis-theme.with(aspect-ratio: "16-9", footer: "Parallel STL - HPC 2024") + +#set text(font: "Fira Sans", weight: "light", size: 20pt) +#show math.equation: set text(font: "Fira Math") + +#title-slide( + title: "Algorithmes parallèles STL avec C++ 20", + subtitle: "GPGPU", + author: "Michaël El Kharroubi", + date: "27.02.2024", + extra: "HPC 2024 - HEPIA", +) + +#new-section-slide("Introduction") + +#slide( + title: "Définition", +)[ + Le terme "_general-purpose computing on graphics processing units_" (GPGPU) + désigne l'ensemble des programmmes qui ne sont pas graphiques et qu'on réalise + sur GPU. + + Par exemple : + - Simulation de phénomènes physiques + - IA et Machine learning + - Minage de crypto-monnaie +] + +#slide( + title: "Pourquoi a-t-on besoin de GPU?", +)[ + Un CPU est conçu pour suivre une série d'instructions séquentiellement (ce qui + n'est plus le cas, dans une moindre mesure, avec les instructions vectorielles + ex: AVX). + + #box(columns(2, gutter: 22pt)[ + == Adapté : + - Ordonancer des tâches + - Accéder aux périphériques + - Réseau + - Disque + - Clavier/souris + #colbreak() + == Moins adapté : + - Calcul vectoriel + - Calcul matriciel + ]) + + Les GPU apportent une réponse à ces problèmes. +] + +#slide( + title: "CPU vs GPU", +)[ + Un GPU est un processeur vectoriel, son objectif est d'effectuer massivement des + calculs en parallèle. + + #figure( + image("assets/cpu-gpu.svg", width: 70%), + caption: [NVIDIA CUDA Programming Guide version 3.0 - 2010], + ) + + #link("https://youtu.be/-P28LKWTzrI")[Partenariat Myth Busters & NVidia] +] + +#new-section-slide("La programmation sur GPU") + +#slide( + title: "CUDA", +)[ + CUDA est le kit de développement de NVIDIA pour faire du GPGPU. C'est le kit le + plus populaire de développement GPGPU. + + CUDA permet d'écrire du code en C/C++ et de le compiler pour qu'il soit exécuté + sur des GPU de NVidia. + + Dans la concurrence, on peut également citer OpenCL (multi-plateforme), ROCm + pour AMD ou OneAPI pour Intel. +] + +#slide(title: "Déroulement classique d'un programmme GPGPU")[ + + Le CPU envoie les données à traiter au GPU #pause + + Le GPU applique un kernel sur les données #pause + + Le CPU récupère le résultat #pause +] + +#new-section-slide("Exemple de code CUDA et notions à retenir") + +#slide(title: "Notions essentielles à retenir")[ + - Le CPU et le GPU sont deux périphériques distincts + - Le GPU est prévu pour effectuer massivement des calculs + - La mémoire n'est pas partagée + - On parle de *Host* pour le CPU et de *Device* pour le GPU +] + +#new-section-slide("Questions ?") \ No newline at end of file diff --git a/assets/.gitkeep b/assets/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/assets/cpu-gpu.svg b/assets/cpu-gpu.svg new file mode 100644 index 0000000000000000000000000000000000000000..59b428ab1ac07a67c6642c2d6edc4d3b63d81c52 --- /dev/null +++ b/assets/cpu-gpu.svg @@ -0,0 +1,1249 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + version="1.1" + width="2162.75" + height="816.04211" + id="svg2"> + <defs + id="defs7309"> + <clipPath + id="clipPath5620"> + <path + d="m 408.88,570.7 41.82,0 0,22.32 -41.82,0 0,-22.32 z" + id="path5622" /> + </clipPath> + <clipPath + id="clipPath5628"> + <path + d="m 408.88,570.7 41.82,0 0,22.32 -41.82,0 0,-22.32 z" + id="path5630" /> + </clipPath> + <clipPath + id="clipPath5640"> + <path + d="m 408.88,570.7 41.82,0 0,22.32 -41.82,0 0,-22.32 z" + id="path5642" /> + </clipPath> + <clipPath + id="clipPath4872"> + <path + d="m 358.36,592.66 143.94,0 0,21.54 -143.94,0 0,-21.54 z" + id="path4874" /> + </clipPath> + <clipPath + id="clipPath4880"> + <path + d="m 358.36,592.66 143.94,0 0,21.54 -143.94,0 0,-21.54 z" + id="path4882" /> + </clipPath> + <clipPath + id="clipPath4892"> + <path + d="m 358.36,592.66 143.94,0 0,21.54 -143.94,0 0,-21.54 z" + id="path4894" /> + </clipPath> + <clipPath + id="clipPath4840"> + <path + d="m 213.86,570.7 41.7,0 0,22.26 -41.7,0 0,-22.26 z" + id="path4842" /> + </clipPath> + <clipPath + id="clipPath4848"> + <path + d="m 213.86,570.7 41.7,0 0,22.26 -41.7,0 0,-22.26 z" + id="path4850" /> + </clipPath> + <clipPath + id="clipPath4860"> + <path + d="m 213.86,570.7 41.7,0 0,22.26 -41.7,0 0,-22.26 z" + id="path4862" /> + </clipPath> + <clipPath + id="clipPath4812"> + <path + d="m 162.8,592.6 143.88,0 0,21.6 -143.88,0 0,-21.6 z" + id="path4814" /> + </clipPath> + <clipPath + id="clipPath4820"> + <path + d="m 162.8,592.6 143.88,0 0,21.6 -143.88,0 0,-21.6 z" + id="path4822" /> + </clipPath> + <clipPath + id="clipPath4832"> + <path + d="m 162.8,592.6 143.88,0 0,21.6 -143.88,0 0,-21.6 z" + id="path4834" /> + </clipPath> + <clipPath + id="clipPath4780"> + <path + d="m 237.86,660.66 33.78,0 0,19.38 -33.78,0 0,-19.38 z" + id="path4782" /> + </clipPath> + <clipPath + id="clipPath4788"> + <path + d="m 237.86,660.66 33.78,0 0,19.38 -33.78,0 0,-19.38 z" + id="path4790" /> + </clipPath> + <clipPath + id="clipPath4800"> + <path + d="m 237.86,660.66 33.78,0 0,19.38 -33.78,0 0,-19.38 z" + id="path4802" /> + </clipPath> + <clipPath + id="clipPath4748"> + <path + d="m 237.86,681.42 33.78,0 0,19.38 -33.78,0 0,-19.38 z" + id="path4750" /> + </clipPath> + <clipPath + id="clipPath4756"> + <path + d="m 237.86,681.42 33.78,0 0,19.38 -33.78,0 0,-19.38 z" + id="path4758" /> + </clipPath> + <clipPath + id="clipPath4768"> + <path + d="m 237.86,681.42 33.78,0 0,19.38 -33.78,0 0,-19.38 z" + id="path4770" /> + </clipPath> + <clipPath + id="clipPath4716"> + <path + d="m 273.2,660.66 33.84,0 0,19.38 -33.84,0 0,-19.38 z" + id="path4718" /> + </clipPath> + <clipPath + id="clipPath4724"> + <path + d="m 273.2,660.66 33.84,0 0,19.38 -33.84,0 0,-19.38 z" + id="path4726" /> + </clipPath> + <clipPath + id="clipPath4736"> + <path + d="m 273.2,660.66 33.84,0 0,19.38 -33.84,0 0,-19.38 z" + id="path4738" /> + </clipPath> + <clipPath + id="clipPath4684"> + <path + d="m 162.92,661.32 71.28,0 0,39.48 -71.28,0 0,-39.48 z" + id="path4686" /> + </clipPath> + <clipPath + id="clipPath4692"> + <path + d="m 162.92,661.32 71.28,0 0,39.48 -71.28,0 0,-39.48 z" + id="path4694" /> + </clipPath> + <clipPath + id="clipPath4704"> + <path + d="m 162.92,661.32 71.28,0 0,39.48 -71.28,0 0,-39.48 z" + id="path4706" /> + </clipPath> + <clipPath + id="clipPath4652"> + <path + d="m 273.2,681.42 33.84,0 0,19.38 -33.84,0 0,-19.38 z" + id="path4654" /> + </clipPath> + <clipPath + id="clipPath4660"> + <path + d="m 273.2,681.42 33.84,0 0,19.38 -33.84,0 0,-19.38 z" + id="path4662" /> + </clipPath> + <clipPath + id="clipPath4672"> + <path + d="m 273.2,681.42 33.84,0 0,19.38 -33.84,0 0,-19.38 z" + id="path4674" /> + </clipPath> + <clipPath + id="clipPath4620"> + <path + d="m 162.92,622 143.88,0 0,36.98 -143.88,0 0,-36.98 z" + id="path4622" /> + </clipPath> + <clipPath + id="clipPath4628"> + <path + d="m 162.92,622 143.88,0 0,36.98 -143.88,0 0,-36.98 z" + id="path4630" /> + </clipPath> + <clipPath + id="clipPath4640"> + <path + d="m 162.92,622 143.88,0 0,36.98 -143.88,0 0,-36.98 z" + id="path4642" /> + </clipPath> + </defs> + <metadata + id="metadata7312"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + transform="translate(709.3125,-108.15625)" + id="layer1"> + <path + d="m -688.26526,641.41379 899.375,0 0,-231.5625 -899.375,0 0,231.5625 z" + id="path4612" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m -688.26526,641.41379 899.375,0 0,-231.5625 -899.375,0 0,231.5625 z" + id="path4614" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4616"> + <g + clip-path="url(#clipPath4620)" + id="g4618"> + <g + id="g4624"> + <g + clip-path="url(#clipPath4628)" + id="g4626"> + <text + transform="matrix(1,0,0,-1,170.12,649)" + id="text4632"> + <tspan + x="0 5.32266 10.1346 14.34006 19.44726" + y="0" + id="tspan4634" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">Cache</tspan> + </text> + </g> + </g> + <g + id="g4636"> + <g + clip-path="url(#clipPath4640)" + id="g4638" /> + </g> + </g> + </g> + <path + d="m 1.10974,270.16379 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4644" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 1.10974,270.16379 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4646" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4648"> + <g + clip-path="url(#clipPath4652)" + id="g4650"> + <g + id="g4656"> + <g + clip-path="url(#clipPath4660)" + id="g4658"> + <text + transform="matrix(1,0,0,-1,278.3,687.96)" + id="text4664"> + <tspan + x="0 5.46 10.01826" + y="0" + id="tspan4666" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">ALU</tspan> + </text> + </g> + </g> + <g + id="g4668"> + <g + clip-path="url(#clipPath4672)" + id="g4670" /> + </g> + </g> + </g> + <path + d="m -688.26526,395.47629 445.625,0 0,-246.875 -445.625,0 0,246.875 z" + id="path4676" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m -688.26526,395.47629 445.625,0 0,-246.875 -445.625,0 0,246.875 z" + id="path4678" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4680"> + <g + clip-path="url(#clipPath4684)" + id="g4682"> + <g + id="g4688"> + <g + clip-path="url(#clipPath4692)" + id="g4690"> + <text + transform="matrix(1,0,0,-1,170.12,690.9)" + id="text4696"> + <tspan + x="0 5.32266 10.24632 15.35352 18.673201 22.13652 27.060181" + y="0" + id="tspan4698" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">Control</tspan> + </text> + </g> + </g> + <g + id="g4700"> + <g + clip-path="url(#clipPath4704)" + id="g4702" /> + </g> + </g> + </g> + <path + d="m 1.10974,399.85129 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4708" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 1.10974,399.85129 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4710" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4712"> + <g + clip-path="url(#clipPath4716)" + id="g4714"> + <g + id="g4720"> + <g + clip-path="url(#clipPath4724)" + id="g4722"> + <text + transform="matrix(1,0,0,-1,278.3,667.2)" + id="text4728"> + <tspan + x="0 5.46 10.01826" + y="0" + id="tspan4730" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">ALU</tspan> + </text> + </g> + </g> + <g + id="g4732"> + <g + clip-path="url(#clipPath4736)" + id="g4734" /> + </g> + </g> + </g> + <path + d="m -220.14026,270.16379 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4740" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m -220.14026,270.16379 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4742" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4744"> + <g + clip-path="url(#clipPath4748)" + id="g4746"> + <g + id="g4752"> + <g + clip-path="url(#clipPath4756)" + id="g4754"> + <text + transform="matrix(1,0,0,-1,242.9,687.96)" + id="text4760"> + <tspan + x="0 5.46 10.01826" + y="0" + id="tspan4762" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">ALU</tspan> + </text> + </g> + </g> + <g + id="g4764"> + <g + clip-path="url(#clipPath4768)" + id="g4766" /> + </g> + </g> + </g> + <path + d="m -220.14026,399.85129 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4772" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m -220.14026,399.85129 211.5625,0 0,-121.5625 -211.5625,0 0,121.5625 z" + id="path4774" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4776"> + <g + clip-path="url(#clipPath4780)" + id="g4778"> + <g + id="g4784"> + <g + clip-path="url(#clipPath4788)" + id="g4786"> + <text + transform="matrix(1,0,0,-1,242.9,667.2)" + id="text4792"> + <tspan + x="0 5.46 10.01826" + y="0" + id="tspan4794" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">ALU</tspan> + </text> + </g> + </g> + <g + id="g4796"> + <g + clip-path="url(#clipPath4800)" + id="g4798" /> + </g> + </g> + </g> + <path + d="m -688.89026,824.85129 899.375,0 0,-135 -899.375,0 0,135 z" + id="path4804" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m -688.89026,824.85129 899.375,0 0,-135 -899.375,0 0,135 z" + id="path4806" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4808"> + <g + clip-path="url(#clipPath4812)" + id="g4810"> + <g + id="g4816"> + <g + clip-path="url(#clipPath4820)" + id="g4818"> + <text + transform="matrix(1,0,0,-1,170,600.28)" + id="text4824"> + <tspan + x="0 6.0408602 11.87424 17.34054" + y="0" + id="tspan4826" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">DRAM</tspan> + </text> + </g> + </g> + <g + id="g4828"> + <g + clip-path="url(#clipPath4832)" + id="g4830" /> + </g> + </g> + </g> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4836"> + <g + clip-path="url(#clipPath4840)" + id="g4838"> + <g + id="g4844"> + <g + clip-path="url(#clipPath4848)" + id="g4846"> + <text + transform="matrix(1,0,0,-1,223.4,580.06)" + id="text4852"> + <tspan + x="0 7.3236599 14.53752" + y="0" + id="tspan4854" + style="font-size:10.97999954px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">CPU</tspan> + </text> + </g> + </g> + <g + id="g4856"> + <g + clip-path="url(#clipPath4860)" + id="g4858" /> + </g> + </g> + </g> + <path + d="m 532.98474,824.53879 899.99996,0 0,-135 -899.99996,0 0,135 z" + id="path4864" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 532.98474,824.53879 899.99996,0 0,-135 -899.99996,0 0,135 z" + id="path4866" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g4868"> + <g + clip-path="url(#clipPath4872)" + id="g4870"> + <g + id="g4876"> + <g + clip-path="url(#clipPath4880)" + id="g4878"> + <text + transform="matrix(1,0,0,-1,365.56,600.34)" + id="text4884"> + <tspan + x="0 6.0408602 11.87424 17.34054" + y="0" + id="tspan4886" + style="font-size:7.98000002px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">DRAM</tspan> + </text> + </g> + </g> + <g + id="g4888"> + <g + clip-path="url(#clipPath4892)" + id="g4890" /> + </g> + </g> + </g> + <path + d="m 533.92224,174.22629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path4896" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,174.22629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path4898" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,201.41379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path4916" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,201.41379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path4918" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,202.66379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path4936" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,202.66379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path4938" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,150.47629 0,52.1875" + id="path4956" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,150.47629 0,52.1875" + id="path4958" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,150.47629 0,52.1875" + id="path4960" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,150.47629 0,52.1875" + id="path4962" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,150.47629 0,52.1875" + id="path4964" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,150.47629 -0.3125,52.1875" + id="path4966" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,150.47629 -0.625,52.1875" + id="path4968" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,150.47629 -0.3125,52.1875" + id="path4970" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,150.47629 -0.625,52.1875" + id="path4972" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,150.47629 -0.625,52.1875" + id="path4974" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,150.47629 -0.3125,52.1875" + id="path4976" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,150.47629 -0.3125,52.1875" + id="path4978" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,150.47629 -0.625,52.1875" + id="path4980" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,150.47629 -0.625,52.1875" + id="path4982" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,150.47629 -0.3125,52.1875" + id="path4984" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,236.72629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path4986" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,236.72629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path4988" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,263.91379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5006" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,263.91379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5008" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,265.16379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5026" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,265.16379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5028" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,212.97629 0,52.1875" + id="path5046" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,212.97629 0,52.1875" + id="path5048" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,212.97629 0,52.1875" + id="path5050" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,212.97629 0,52.1875" + id="path5052" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,212.97629 0,52.1875" + id="path5054" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,212.97629 -0.3125,52.1875" + id="path5056" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,212.97629 -0.625,52.1875" + id="path5058" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,212.97629 -0.3125,52.1875" + id="path5060" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,212.97629 -0.625,52.1875" + id="path5062" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,212.97629 -0.625,52.1875" + id="path5064" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,212.97629 -0.3125,52.1875" + id="path5066" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,212.97629 -0.3125,52.1875" + id="path5068" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,212.97629 -0.625,52.1875" + id="path5070" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,212.97629 -0.625,52.1875" + id="path5072" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,212.97629 -0.3125,52.1875" + id="path5074" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,299.22629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5076" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,299.22629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5078" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,326.41379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5096" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,326.41379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5098" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,327.66379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5116" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,327.66379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5118" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,275.47629 0,52.1875" + id="path5136" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,275.47629 0,52.1875" + id="path5138" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,275.47629 0,52.1875" + id="path5140" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,275.47629 0,52.1875" + id="path5142" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,275.47629 0,52.1875" + id="path5144" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,275.47629 -0.3125,52.1875" + id="path5146" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,275.47629 -0.625,52.1875" + id="path5148" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,275.47629 -0.3125,52.1875" + id="path5150" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,275.47629 -0.625,52.1875" + id="path5152" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,275.47629 -0.625,52.1875" + id="path5154" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,275.47629 -0.3125,52.1875" + id="path5156" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,275.47629 -0.3125,52.1875" + id="path5158" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,275.47629 -0.625,52.1875" + id="path5160" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,275.47629 -0.625,52.1875" + id="path5162" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,275.47629 -0.3125,52.1875" + id="path5164" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,361.72629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5166" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,361.72629 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5168" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,388.91379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5186" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,388.91379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5188" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,390.16379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5206" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,390.16379 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5208" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,337.97629 0,52.1875" + id="path5226" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,337.97629 0,52.1875" + id="path5228" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,337.97629 0,52.1875" + id="path5230" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,337.97629 0,52.1875" + id="path5232" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,337.97629 0,52.1875" + id="path5234" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,337.97629 -0.3125,52.1875" + id="path5236" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,337.97629 -0.625,52.1875" + id="path5238" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,337.97629 -0.3125,52.1875" + id="path5240" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,337.97629 -0.625,52.1875" + id="path5242" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,337.97629 -0.625,52.1875" + id="path5244" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,337.97629 -0.3125,52.1875" + id="path5246" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,337.97629 -0.3125,52.1875" + id="path5248" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,337.97629 -0.625,52.1875" + id="path5250" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,337.97629 -0.625,52.1875" + id="path5252" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,337.97629 -0.3125,52.1875" + id="path5254" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,424.53879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5256" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,424.53879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5258" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,452.03879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5276" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,452.03879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5278" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,453.28879 834.99996,0 0,-52.5 -834.99996,0 0,52.5 z" + id="path5296" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,453.28879 834.99996,0 0,-52.5 -834.99996,0 0,52.5 z" + id="path5298" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,400.78879 0,52.5" + id="path5316" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,400.78879 0,52.5" + id="path5318" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,400.78879 0,52.5" + id="path5320" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,400.78879 0,52.5" + id="path5322" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,400.78879 0,52.5" + id="path5324" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,400.78879 -0.3125,52.5" + id="path5326" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,400.78879 -0.625,52.5" + id="path5328" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,400.78879 -0.3125,52.5" + id="path5330" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,400.78879 -0.625,52.5" + id="path5332" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,400.78879 -0.625,52.5" + id="path5334" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,400.78879 -0.3125,52.5" + id="path5336" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,400.78879 -0.3125,52.5" + id="path5338" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,400.78879 -0.625,52.5" + id="path5340" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,400.78879 -0.625,52.5" + id="path5342" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,400.78879 -0.3125,52.5" + id="path5344" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,487.35129 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5346" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,487.35129 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5348" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,514.53879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5366" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,514.53879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5368" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,515.78879 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5386" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,515.78879 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5388" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,463.60129 0,52.1875" + id="path5406" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,463.60129 0,52.1875" + id="path5408" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,463.60129 0,52.1875" + id="path5410" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,463.60129 0,52.1875" + id="path5412" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,463.60129 0,52.1875" + id="path5414" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,463.60129 -0.3125,52.1875" + id="path5416" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,463.60129 -0.625,52.1875" + id="path5418" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,463.60129 -0.3125,52.1875" + id="path5420" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,463.60129 -0.625,52.1875" + id="path5422" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,463.60129 -0.625,52.1875" + id="path5424" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,463.60129 -0.3125,52.1875" + id="path5426" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,463.60129 -0.3125,52.1875" + id="path5428" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,463.60129 -0.625,52.1875" + id="path5430" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,463.60129 -0.625,52.1875" + id="path5432" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,463.60129 -0.3125,52.1875" + id="path5434" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,549.85129 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5436" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,549.85129 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5438" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,577.03879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5456" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,577.03879 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5458" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,578.28879 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5476" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,578.28879 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5478" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,526.10129 0,52.1875" + id="path5496" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,526.10129 0,52.1875" + id="path5498" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,526.10129 0,52.1875" + id="path5500" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,526.10129 0,52.1875" + id="path5502" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,526.10129 0,52.1875" + id="path5504" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,526.10129 -0.3125,52.1875" + id="path5506" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,526.10129 -0.625,52.1875" + id="path5508" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,526.10129 -0.3125,52.1875" + id="path5510" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,526.10129 -0.625,52.1875" + id="path5512" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,526.10129 -0.625,52.1875" + id="path5514" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,526.10129 -0.3125,52.1875" + id="path5516" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,526.10129 -0.3125,52.1875" + id="path5518" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,526.10129 -0.625,52.1875" + id="path5520" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,526.10129 -0.625,52.1875" + id="path5522" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,526.10129 -0.3125,52.1875" + id="path5524" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,612.66379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5526" + style="fill:#ffcc00;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,612.66379 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5528" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 533.92224,639.85129 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5546" + style="fill:#ff6600;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 533.92224,639.85129 56.25,0 0,-25 -56.25,0 0,25 z" + id="path5548" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 597.67224,641.10129 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5566" + style="fill:#99ff66;fill-opacity:1;fill-rule:evenodd;stroke:none" /> + <path + d="m 597.67224,641.10129 834.99996,0 0,-52.1875 -834.99996,0 0,52.1875 z" + id="path5568" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 649.85974,588.91379 0,52.1875" + id="path5586" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 702.04724,588.91379 0,52.1875" + id="path5588" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 754.23474,588.91379 0,52.1875" + id="path5590" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 806.10974,588.91379 0,52.1875" + id="path5592" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 858.29724,588.91379 0,52.1875" + id="path5594" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 910.79724,588.91379 -0.3125,52.1875" + id="path5596" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1223.9222,588.91379 -0.625,52.1875" + id="path5598" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 963.29724,588.91379 -0.3125,52.1875" + id="path5600" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1015.4847,588.91379 -0.625,52.1875" + id="path5602" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1067.6722,588.91379 -0.625,52.1875" + id="path5604" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1119.5472,588.91379 -0.3125,52.1875" + id="path5606" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1171.7347,588.91379 -0.3125,52.1875" + id="path5608" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1276.4222,588.91379 -0.625,52.1875" + id="path5610" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1328.6097,588.91379 -0.625,52.1875" + id="path5612" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <path + d="m 1380.4847,588.91379 -0.3125,52.1875" + id="path5614" + style="fill:none;stroke:#969696;stroke-width:0.875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:8;stroke-opacity:1;stroke-dasharray:none" /> + <g + transform="matrix(6.25,0,0,-6.25,-1706.3903,4528.6016)" + id="g5616"> + <g + clip-path="url(#clipPath5620)" + id="g5618"> + <g + id="g5624"> + <g + clip-path="url(#clipPath5628)" + id="g5626"> + <text + transform="matrix(1,0,0,-1,418,580.12)" + id="text5632"> + <tspan + x="0 8.1801004 15.39396" + y="0" + id="tspan5634" + style="font-size:10.97999954px;font-variant:normal;font-weight:bold;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Tahoma;-inkscape-font-specification:Tahoma Bold">GPU</tspan> + </text> + </g> + </g> + <g + id="g5636"> + <g + clip-path="url(#clipPath5640)" + id="g5638" /> + </g> + </g> + </g> + </g> +</svg> diff --git a/intro.typ b/intro.typ index 89c053edbffa114c8d60a152239e4266fcc02b39..6e87c2a441a34b67aa22ed9d5953626c53822599 100644 --- a/intro.typ +++ b/intro.typ @@ -3,20 +3,17 @@ #import "@preview/polylux:0.3.1": * #import themes.metropolis : * -#show: metropolis-theme.with( - aspect-ratio: "16-9", - footer: "Parallel STL - HPC 2024" -) +#show: metropolis-theme.with(aspect-ratio: "16-9", footer: "Parallel STL - HPC 2024") #set text(font: "Fira Sans", weight: "light", size: 20pt) #show math.equation: set text(font: "Fira Math") #title-slide( title: "Algorithmes parallèles STL avec C++ 20", - subtitle: "HPC 2024", + subtitle: "Introduction", author: "Michaël El Kharroubi", date: "27.02.2024", - extra: "HEPIA", + extra: "HPC 2024 - HEPIA", ) //#slide(title: "Table des matières")[ @@ -25,38 +22,45 @@ #new-section-slide("Introduction") -#slide(title: "Objectif du cours")[ -Dans ce cours, nous verrons comment exécuter du code sur GPU de façon moderne avec C++. +#slide( + title: "Objectif du cours", +)[ + Dans ce cours, nous verrons comment exécuter du code sur GPU de façon moderne + avec C++. -Nous utiliserons le kit de développement HPC de Nvidia, en particulier le compilateur _nvc++_. + Nous utiliserons le kit de développement HPC de Nvidia, en particulier le + compilateur _nvc++_. -Le but de ce cours est de vous donner une courte introduction au calcul générique sur processeur graphique (GPGPU). + Le but de ce cours est de vous donner une courte introduction au calcul + générique sur processeur graphique (GPGPU). ] #slide(title: "Contenu du cours")[ - #box( - columns(1)[ - Dans ce cours nous verrons les concepts suivants : - - + Qu'est-ce que le GPGPU, et pour quel usage s'en sert-on? - + Comment fait-on du GPGPU de manière classique - + La problématique de la mémoire en GPGPU #pause - + Les itérateurs C++ - + Les vecteurs, les tableaux et les spans - + Les captures - + Les algorithmes STL #pause - + Présentation du kit HPC Nvidia - + Le compilateur nvc++ - + Comment paralléliser son code avec nvc++ - + Le futur du paradigme STL avec les mdspans et les views - ] - ) + #box(columns(1)[ + Dans ce cours nous verrons les concepts suivants : + + + Qu'est-ce que le GPGPU, et pour quel usage s'en sert-on? + + Comment fait-on du GPGPU de manière classique + + La problématique de la mémoire en GPGPU #pause + + Les itérateurs C++ + + Les vecteurs, les tableaux et les spans + + Les captures + + Les algorithmes STL #pause + + Présentation du kit HPC Nvidia + + Le compilateur nvc++ + + Comment paralléliser son code avec nvc++ + + Le futur du paradigme STL avec les mdspans et les views + ]) ] -#slide(title: "Planning du cours")[ - Le cours sera donné sur une semaine (5 périodes). Nous ferons 2 périodes de théorie et 3 périodes de pratique. +#slide( + title: "Planning du cours", +)[ + Le cours sera donné sur une semaine (5 périodes). Nous ferons 2 périodes de + théorie et 3 périodes de pratique. - Pour la partie pratique, nous implémenterons le calcul des équations de la chaleur sur GPU. + Pour la partie pratique, nous implémenterons le calcul des équations de la + chaleur sur GPU. ] #new-section-slide("Questions ?") \ No newline at end of file