diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json index 0087d16..85469c7 100644 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -2,7 +2,8 @@ "theme": "moonstone", "accentColor": "#5f78f1", "enabledCssSnippets": [ - "nota" + "nota", + "warning" ], "cssTheme": "" } \ No newline at end of file diff --git a/.obsidian/snippets/warning.css b/.obsidian/snippets/warning.css new file mode 100644 index 0000000..0e70052 --- /dev/null +++ b/.obsidian/snippets/warning.css @@ -0,0 +1,20 @@ +div.warn { + background-color: #ffc4c4; + border: 1px solid #ff8080; + border-radius: 5px; + padding: 10px; + margin-top: 10px; + margin-bottom: 10px; + color: #8b0000; +} + +div.warn > h4 { + margin-top: 0; + text-decoration: underline; + margin-bottom: 5px; +} + +div.warn > p { + margin-top: 0; + margin-bottom: 0; +} diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 9b810aa..e2b232e 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,35 +4,53 @@ "type": "split", "children": [ { - "id": "423b3e21186921fd", + "id": "c0e94983c70f8454", "type": "tabs", "children": [ { - "id": "4a1e2fed94753391", + "id": "44290f906d2f39dd", "type": "leaf", "state": { - "type": "image", + "type": "markdown", "state": { - "file": "TERCERO/SS/images/Pasted image 20241125141142.png" + "file": "TERCERO/SPD/Teoría_2425.md", + "mode": "source", + "source": false }, - "icon": "lucide-image", - "title": "Pasted image 20241125141142" + "icon": "lucide-file", + "title": "Teoría_2425" } }, { - "id": "a51c44701f5e6ac3", + "id": "b9dc483ed444f858", "type": "leaf", "state": { - "type": "image", + "type": "markdown", "state": { - "file": "TERCERO/IA/images/Pasted image 20241127091611.png" + "file": "TERCERO/SPD/Teoría_2425.md", + "mode": "source", + "source": false }, - "icon": "lucide-image", - "title": "Pasted image 20241127091611" + "icon": "lucide-file", + "title": "Teoría_2425" + } + }, + { + "id": "9c276221889aa33a", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "TERCERO/IA/Teoría_2425.md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "Teoría_2425" } } ], - "currentTab": 1 + "currentTab": 2 } ], "direction": "vertical" @@ -88,7 +106,7 @@ } ], "direction": "horizontal", - "width": 300 + "width": 281.5110321044922 }, "right": { "id": "44cf06183e1c1c7d", @@ -185,29 +203,28 @@ "obsidian-git:Open Git source control": false } }, - "active": "a4eac8e6613b153b", + "active": "9c276221889aa33a", "lastOpenFiles": [ - "TERCERO/IA/images/Sin título.png", - "TERCERO/IA/images/Pasted image 20241127091943.png", - "TERCERO/IA/images/Pasted image 20241127091902.png", - "TERCERO/IA/images/Pasted image 20241127091731.png", - "TERCERO/IA/images/Pasted image 20241127091611.png", + "Pasted image 20241202205510.png", + "TERCERO/SPD/Teoría_2425.md", + "Pasted image 20241202214411.png", + "Pasted image 20241202214354.png", + "Pasted image 20241202214247.png", + "Pasted image 20241202214242.png", + "Pasted image 20241202214114.png", + "Pasted image 20241202214112.png", + "Pasted image 20241202213603.png", + "Pasted image 20241202213354.png", + "Pasted image 20241202213404.png", + "TERCERO/IA/Teoría_2425.md", "conflict-files-obsidian-git.md", - "TERCERO/SS/images/Pasted image 20241125141142.png", - "TERCERO/ATR1/images/Pasted image 20241125145544.png", - "TERCERO/ATR1/images/Pasted image 20241125145439.png", - "TERCERO/ATR1/images/Pasted image 20241125145413.png", - "TERCERO/ATR1/images/Pasted image 20241125145411.png", - "TERCERO/ATR1/images/Pasted image 20241125145409.png", "TERCERO/SS/SS Lab.md", "SEGUNDO/IISSI1/Teoría_2324.md", "TERCERO/ATR1/Teoría_2425.md", "TERCERO/SS/SS 24-25.md", - "TERCERO/SPD/Teoría_2425.md", "Untitled.md", "TERCERO/ATR1/Resolución 1 Parcial ATR1.md", "TERCERO/ATR1/Ejercicios.md", - "TERCERO/IA/Teoría_2425.md", "TERCERO/SPD/P4_SPD.md", "SEGUNDO/ADDA/Teoría_2324.md", "TERCERO/IA/Apuntes Julia.md", diff --git a/Pasted image 20241202205510.png b/Pasted image 20241202205510.png new file mode 100644 index 0000000..c2f8d85 Binary files /dev/null and b/Pasted image 20241202205510.png differ diff --git a/Pasted image 20241202213354.png b/Pasted image 20241202213354.png new file mode 100644 index 0000000..fa868b0 Binary files /dev/null and b/Pasted image 20241202213354.png differ diff --git a/Pasted image 20241202213404.png b/Pasted image 20241202213404.png new file mode 100644 index 0000000..ce7b751 Binary files /dev/null and b/Pasted image 20241202213404.png differ diff --git a/Pasted image 20241202213603.png b/Pasted image 20241202213603.png new file mode 100644 index 0000000..a599f57 Binary files /dev/null and b/Pasted image 20241202213603.png differ diff --git a/Pasted image 20241202214112.png b/Pasted image 20241202214112.png new file mode 100644 index 0000000..24bea6d Binary files /dev/null and b/Pasted image 20241202214112.png differ diff --git a/Pasted image 20241202214114.png b/Pasted image 20241202214114.png new file mode 100644 index 0000000..24bea6d Binary files /dev/null and b/Pasted image 20241202214114.png differ diff --git a/Pasted image 20241202214242.png b/Pasted image 20241202214242.png new file mode 100644 index 0000000..a10c14b Binary files /dev/null and b/Pasted image 20241202214242.png differ diff --git a/Pasted image 20241202214247.png b/Pasted image 20241202214247.png new file mode 100644 index 0000000..a10c14b Binary files /dev/null and b/Pasted image 20241202214247.png differ diff --git a/Pasted image 20241202214354.png b/Pasted image 20241202214354.png new file mode 100644 index 0000000..3888543 Binary files /dev/null and b/Pasted image 20241202214354.png differ diff --git a/Pasted image 20241202214411.png b/Pasted image 20241202214411.png new file mode 100644 index 0000000..170df81 Binary files /dev/null and b/Pasted image 20241202214411.png differ diff --git a/TERCERO/SPD/Teoría_2425.md b/TERCERO/SPD/Teoría_2425.md index 69c87bf..2b6761a 100644 --- a/TERCERO/SPD/Teoría_2425.md +++ b/TERCERO/SPD/Teoría_2425.md @@ -145,7 +145,7 @@ graph TD; 7[Linkado y .exe nativo] --> 10[CPU] 9[Ensamblador nativo] --> 10[CPU] ``` -# TEMA 3: Paralelismo a nivel de instrucciones (ILP) +# TEMA 3: Instruction Level Parallelism (ILP) ## 1. Técnicas de planificación dinámicas ### $t_{CPU}=N_{instr}\times CPI\times T_{CLK}$ @@ -212,8 +212,185 @@ Estas escriben en registros y memoria antes de abortarse y es un problema. Tambi - **Fase IS:** más compleja (bottleneck). Emite las $m$ instrucciones mientras haya RS libres. - **Fase EX:** total UF > $m$ y doble puerto. - **Fase WB:** nº de CDBs y puertos del fichero de registros proporcional a $m$. -# TEMA 4: Paralelismo a nivel de datos (DLP) -### Introducción -- DLP sólo es útil para paralelismo de datos (vectores/matrices o código científico/multimedia). -- Es más correcto: **Arquitecturas SIMD (Single Instruction Multiple Data)** o de paralelismo de datos, o núcleos vectoriales. -- Variante: **GP-GPU (General Purpose-Graphics Processor Unit)**. +# TEMA 4: Data Level Parallelism (DLP) +## 1. Set de instrucciones SIMD +Registro SIMD (MMX Intel, AVX AMD). +![[Imagen de WhatsApp 2024-12-01 a las 17.20.40_e72cdcba.jpg|300]] +![[Imagen de WhatsApp 2024-12-01 a las 17.20.58_65b04e33.jpg|300]] +### Instrucciones aritméticas +Se añade un suffix que indica vectorización. Hay 4 tipos de suffix dependiendo de: +![[Imagen de WhatsApp 2024-12-01 a las 17.43.54_e82058e0.jpg|400]] +#### Ejemplo +![[Imagen de WhatsApp 2024-12-01 a las 17.21.22_99f7757f.jpg|250]] +```asm +addps MM2, MM1, MM3 +addpd MM7, ... +``` +### Operaciones lógicas +```asm +andps MM2, MM1, MMmask ---> MMmask = 0x7FFFFFFF, signo: 0 (+) +orpd +xorps MMX, MMX, MMmask ---> MMmask = 0x80000000, cambia signo +xnorps ... +notpd ... +``` +### Instrucciones de comparación (generan máscaras) +`cmptgtss MMmask, MM2, MM4` +![[Imagen de WhatsApp 2024-12-01 a las 17.21.42_81ca5180.jpg|250]] +### Instrucciones de acceso a memoria +Movimientos de 128 bits (`ldps`, `stpd`). Conviene tener alineamiento: 128 bits (16B) $\rightarrow$ `Rx $ 16 = 0`. +### Instrucciones de "shuffle" de elementos +``` +shufps MMfd, MMf, MMmask +shufpd ... +``` +La única instrucción de este tipo que es "útil" es: `shufps MM1, MM1, a` que es para replicar `a` en todos. +#### Ejemplo: DAXPY +![[Imagen de WhatsApp 2024-12-01 a las 17.22.01_a68c21f3.jpg|500]] +#### Ejemplo: Sumatorio +![[Imagen de WhatsApp 2024-12-01 a las 17.22.17_9d40634d.jpg|500]] +Truco: poner a '0' un registro: xorpd MMS, MMS, MMS +## 2 .Procesado condicional +La vectorización es incompatible con las sentencias `if/else` hay que hacerlas desaparecer. Se usa la ejecución predicativa de forma: `[COND] INSTRUCCIÓN` +1. Generar V's +2. Generar F's +3. Compactar con máscaras + +![[Pasted image 20241201180415.png|400]] +![[Pasted image 20241201180451.png]] +## 3. Modelo del tejado (Roofline Model) +$$ \begin{equation} +GLFOPS=\frac{Nº~FLOPS}{10^9·t_{CPU}}=D_A·AB_{RAM}=\frac{Nº~FLOPS}{1~Byte}·\frac{1~GB}{1~s} +\end {equation} $$ +$$ \begin{equation} +\log{(GFLOPS)}=\log{(AB_{RAM})}+1·\log{(D_A)}\text{ queda de la forma: y=ax+b} +\end {equation} $$ +![[Imagen de WhatsApp 2024-12-01 a las 17.23.41_327415e6.jpg|]] +A tener en cuenta: +- 2 UF +- Núcleo vectorial AVX (256 bits = 8 x 32 float) +- $\frac{2x8~FLOPS}{1~ciclo}·\frac{F~Gciclos}{1~s}·\text{12 cores en ||}=3GHz=16·3·12~GFLOPS~(techo)$ + +Siendo la densidad aritmética ideal: +$D_{A,ideal}=\frac{\text{GFLOPS techo}}{AB_{RAM}}=\frac{16·3·12}{48}=12$ +# TEMA 5: Thread Level Parallelism (TLP) +### Puntos débiles de un sistema multicore +- Difícil analizar si una app es paralelizable. +- Difícil de hacer DEBUG +- Pensar en vectorial es difícil +- Si el dato es remoto ("sale del computador") $\Rightarrow$ alta latencia (ms). +## 1. Taxonomía de Flynn. Taxonomía según la MP. +Single/Multiple Instruction/Data flows: +- SISD +- SIMD +- MISD +- MIMD +Si atendemos a cómo se organiza la memoria principal (MP): +![[Imagen de WhatsApp 2024-12-02 a las 19.14.00_a8876db6.jpg|400]] +- **UMA (Uniform Memory Access):** + - Tiempo de acceso uniforme para toda dirección. + - También se llaman Multiprocesadores Simétricos (SMP). + - Casi todos los multicore actuales son así. + - Hay cuello de botella en el acceso a memoria. +- **NUMA (Non Uniform Memory Access):** + - Tiempo de acceso no uniforme. + - Compatible con UMA. +- **MPM (Message Passing Machine):** + - Espacio de direcciones distribuido. + - Cada CPU es un computador independiente. + - Escalabilidad fácil excepto en el ancho de banda de lectura (en memoria). + - Comunicación por mensajes (como el S.O.) +

Escalabilidad

Un concepto es escalable si al crecer p (nº CPUs), crece al menos tanto como p.

+## 2. Herramientas de programación: OpenMP +- Espacio de direcciones compartido +- Paralelismo "incremental" porque se van añadiendo directivas `#pragma omp ...` +- Modelo de programación SPMD (Single Program Multiple Data). + ![[Imagen de WhatsApp 2024-12-02 a las 19.20.38_10d0403a 1.jpg]] + Cada hilo lleva un `tid`, que lo identifica: + ![[Imagen de WhatsApp 2024-12-02 a las 19.21.18_1bf4e996.jpg|500]] +### Puntos clave para el diseño de una app +1. Buscar regiones paralelas (mucho DLP) +2. Insertar directivas (`#pragma omp ...`) para especificar el reparto de tareas entre hilos +3. Comunicación y sincronización entre hilos +4. "Revolución": modificar DSA si no hay buen paralelismo +### Directivas de la librería OpenMP +`omp_set_num_threads(nth);` -> establece el número de hilos a usar +`omp_get_num_threads();` -> obtiene el número de hilos actual +`omp_get_thread_num();` -> obtiene el `tid` del hilo en uso +![[Imagen de WhatsApp 2024-12-02 a las 19.25.01_a3ba0084.jpg|400]] +![[Imagen de WhatsApp 2024-12-02 a las 19.25.30_3a3bec91.jpg]] +

Detalle

Toda variable compartida puede dar lugar a problemas de coherencia en Memoria Caché.

+### Planificación de Tareas: SCHEDULE +Hay diferentes formas de asignar iteraciones a hilos: +- `schedule(static[,chunk])`: "chunk" iteraciones se asignan de manera estática a los hilos en _round-robin_. +- `schedule(dynamic[,chunk])`: cada hilo toma "chunk" iteraciones cada vez que está sin trabajo. +- `schedule(guided[,chunk])`: cada hilo toma progresivamente menos iteraciones (dinámicamente) hasta "chunk". + +![[Pasted image 20241202205510.png|400]] +Hay algunas diferencias notables entre **static** y **dynamic**: +- **Static:** menos coste / mejor localidad de datos +- **Dynamic:** más coste / carga más equilibrada +### Reparto de tareas +1. Directiva **`for`**: se pone dentro de una sección **`omp parallel`**. Reparte la ejecución de un bucle entre todos los hilos. +2. Directiva **`sections`**: para definir "manualmente" trozos o secciones de una región paralela a repartir entre hilos en función de su `tid`. +3. Directiva **`single`**: para definir un trozo de código que sólo lo debe ejecutar un hilo. +### Sincronización +Los hilos se detienen hasta que alcancen la barrera (`#pragma omp barrier`). +

NOTA

#pragma parallel for introduce una barrera de forma implícita

+### Secciones críticas y actualizaciones atómicas +Si los hilos se comunican con variables compartidas, y estas se usan mal, se originan condiciones de carrera (data-race). Se intenta sincronizar para evitarlas, pero poco, ya que la sincronización es costosa. Para definir la sección crítica se usa la directiva `#pragma omp critical`. +## 3. Herramientas de programación: MPI +Message Passing Interface o MPI, es una especificación para paso de mensajes. Algunas ventajas al usar MPI son: +- Es estándar en HPC +- Es portable +- Funcionalidad (alrededor de 115 rutinas) +Las principales implementaciones son OpenMPI, MPI-CH, LAMMPI. +### Modelo SPMD de programación +Un único fichero de código, una copia del ejecutable en cada nodo (incluye bifurcaciones según el `PID`). También puede haber un **mpd daemon** que se ejecuta en cada nodo del cluster y espera envío de procesos a estos para levantarlos. +### Inicialización y terminación +- Se incluye en el header `mpi.h`. +- `int MPI_Init(int* argc, char*** argv)` + - debe ser la primera llamada (y sólo una vez) + - inicializa el entorno de ejecución + - arc y argv son del main +- `int MPI_Finalize(void)` + - termina el entorno de ejecución de MPI + - debe ser la última rutina de MPI +- `int MPI_Comm_size(MPI_COMM_WORLD, int* totTasks)` + - devuelve el número de procesos en el grupo (_comunicador_ MPI) en `totTasks` +- `int MPI_Comm_rank(MPI_COMM_WORLD, int* task_id)` + - devuelve el rango (id) del proceso actual (de 0 a `totTasks`-1) en `task_id`. +Aproximadamente todos los mensajes de MPI tienen: +- **buff**: el puntero a enviar +- **count**: el numero de unidades +- **MPI_TYPE**: el tipo de variables +- **source/dest**: ID de proceso donde llega o de donde viene +- **tag**: etiqueta del mensaje +- **comm**: ID del grupo de procesos (_comunicador_) +- **status**: chequea si el mensaje fue correcto +### Mensajes simples: de uno a uno +- `int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)` + - envío básico **BLOQUEANTE**. + - la rutina retorna cuando el buffer de la app está libre + - existe `MPI_Isend` **NO BLOQUEANTE** +- `int MPI_Recv(void* rbuf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status* status)` + - recibe un mensaje (**BLOQUEANTE**) + - existe `MPI_Irecv` **NO BLOQUEANTE** +

/!\ ATENCIÓN /!\

Puede ocurrir un INTERBLOQUEO (deadlock) si se intenta hacer MPI_Recv(...) sin mandar un mensaje con MPI_Send(...)

+### Comunicación colectiva +Similar a OpenMP pero con más operaciones. Movimiento colectivo de datos. Hay varios tipos: +- **Broadcast:** desde un proceso al resto de procesos. + `int MPI_Bcast(void* buff, int count, MPI_Datatype datatype, int root, MPI_Comm comm)` + ![[Pasted image 20241202213404.png|400]] +- **Scatter:** distribuye distintos mensajes de un proceso al resto. Un proceso **root** debe tener un buffer con `sendcnt*p` elementos. Lo habitual es: `sendcnt = recvcnt`. + `int MPI_Scatter(void* sendbuf, int sendcnt, MPI_Datatype sendtype, void* recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm)` + ![[Pasted image 20241202213603.png|400]] + - **Gather:** recoge distintos mensajes de cada proceso en un único proceso destino. Es la contraria de `MPI_Scatter`. ![[Pasted image 20241202214114.png|600]] +- **Allgather:** concatena los datos de todos los procesos. Cada proceso realiza un broadcast uno-a-todos. + ![[Pasted image 20241202214247.png|400]] +#### Esquema Scatter-Gather +Se suele usar el esquema **Scatter-Gather** +![[Pasted image 20241202214411.png]] +### Reducciones: MPI_Reduce +`int MPI_Reduce(const void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)` +## 4. Caracterización de aplicaciones diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.20.40_e72cdcba.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.20.40_e72cdcba.jpg new file mode 100644 index 0000000..d7d3cbc Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.20.40_e72cdcba.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.20.58_65b04e33.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.20.58_65b04e33.jpg new file mode 100644 index 0000000..e3aa960 Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.20.58_65b04e33.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.21.22_99f7757f.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.21.22_99f7757f.jpg new file mode 100644 index 0000000..9d088e7 Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.21.22_99f7757f.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.21.42_81ca5180.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.21.42_81ca5180.jpg new file mode 100644 index 0000000..0a58bca Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.21.42_81ca5180.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.01_a68c21f3.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.01_a68c21f3.jpg new file mode 100644 index 0000000..cf71d4b Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.01_a68c21f3.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.17_9d40634d.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.17_9d40634d.jpg new file mode 100644 index 0000000..5468e12 Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.17_9d40634d.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.36_dfa6b4c5.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.36_dfa6b4c5.jpg new file mode 100644 index 0000000..a0dcb3e Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.22.36_dfa6b4c5.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.23.41_327415e6.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.23.41_327415e6.jpg new file mode 100644 index 0000000..85f93b9 Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.23.41_327415e6.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.43.54_e82058e0.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.43.54_e82058e0.jpg new file mode 100644 index 0000000..8253e2d Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-01 a las 17.43.54_e82058e0.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.14.00_a8876db6.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.14.00_a8876db6.jpg new file mode 100644 index 0000000..8c2f977 Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.14.00_a8876db6.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.20.38_10d0403a 1.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.20.38_10d0403a 1.jpg new file mode 100644 index 0000000..12cee7b Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.20.38_10d0403a 1.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.20.38_10d0403a.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.20.38_10d0403a.jpg new file mode 100644 index 0000000..12cee7b Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.20.38_10d0403a.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.21.18_1bf4e996.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.21.18_1bf4e996.jpg new file mode 100644 index 0000000..21b49a7 Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.21.18_1bf4e996.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.25.01_a3ba0084.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.25.01_a3ba0084.jpg new file mode 100644 index 0000000..0a32013 Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.25.01_a3ba0084.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.25.30_3a3bec91.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.25.30_3a3bec91.jpg new file mode 100644 index 0000000..57900ae Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.25.30_3a3bec91.jpg differ diff --git a/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.28.17_4c5ba582.jpg b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.28.17_4c5ba582.jpg new file mode 100644 index 0000000..83dd75f Binary files /dev/null and b/TERCERO/SPD/images/Imagen de WhatsApp 2024-12-02 a las 19.28.17_4c5ba582.jpg differ diff --git a/TERCERO/SPD/images/Pasted image 20241201180415.png b/TERCERO/SPD/images/Pasted image 20241201180415.png new file mode 100644 index 0000000..1b35274 Binary files /dev/null and b/TERCERO/SPD/images/Pasted image 20241201180415.png differ diff --git a/TERCERO/SPD/images/Pasted image 20241201180451.png b/TERCERO/SPD/images/Pasted image 20241201180451.png new file mode 100644 index 0000000..e84cb51 Binary files /dev/null and b/TERCERO/SPD/images/Pasted image 20241201180451.png differ diff --git a/conflict-files-obsidian-git.md b/conflict-files-obsidian-git.md deleted file mode 100644 index 9eb700e..0000000 --- a/conflict-files-obsidian-git.md +++ /dev/null @@ -1,47 +0,0 @@ -# Conflicts -Please resolve them and commit them using the commands `Git: Commit all changes` followed by `Git: Push` -(This file will automatically be deleted before commit) -[[#Additional Instructions]] available below file list - -- Not a file: .obsidian/workspace.json -- Not a file: Pasted image 20241125141142.png -- Not a file: Pasted image 20241125141145.png -- Not a file: Pasted image 20241125143529.png -- Not a file: Pasted image 20241125144533.png -- Not a file: Pasted image 20241125144536.png -- Not a file: Pasted image 20241125145409.png -- Not a file: Pasted image 20241125145411.png -- Not a file: Pasted image 20241125145413.png -- Not a file: Pasted image 20241125145439.png -- Not a file: Pasted image 20241125145544.png -- [[TERCERO/ATR1/images/Pasted image 20241125141142.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125141145.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125143529.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125144533.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125144536.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125145409.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125145411.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125145413.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125145439.png]] -- [[TERCERO/ATR1/images/Pasted image 20241125145544.png]] -- [[TERCERO/SS/images/Pasted image 20241125141142.png]] -- [[TERCERO/SS/images/Pasted image 20241125141145.png]] -- [[TERCERO/SS/images/Pasted image 20241125143529.png]] -- [[TERCERO/SS/images/Pasted image 20241125144533.png]] -- [[TERCERO/SS/images/Pasted image 20241125144536.png]] -- [[TERCERO/SS/images/Pasted image 20241125145409.png]] -- [[TERCERO/SS/images/Pasted image 20241125145411.png]] -- [[TERCERO/SS/images/Pasted image 20241125145413.png]] -- [[TERCERO/SS/images/Pasted image 20241125145439.png]] -- [[TERCERO/SS/images/Pasted image 20241125145544.png]] - -# Additional Instructions -I strongly recommend to use "Source mode" for viewing the conflicted files. For simple conflicts, in each file listed above replace every occurrence of the following text blocks with the desired text. - -```diff -<<<<<<< HEAD - File changes in local repository -======= - File changes in remote repository ->>>>>>> origin/main -``` \ No newline at end of file