<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kenrios</id>
	<title>EcuRed - Contribuciones del colaborador [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kenrios"/>
	<link rel="alternate" type="text/html" href="https://www.ecured.cu/Especial:Contribuciones/Kenrios"/>
	<updated>2026-06-16T09:54:27Z</updated>
	<subtitle>Contribuciones del colaborador</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=4064785</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=4064785"/>
		<updated>2021-11-26T02:11:57Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=350px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
La '''taxonomía de Flynn''' es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
==Clasificaciones==&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de [[Fragmentación|fragmentación interna]]. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la [[arquitectura de Von-Neumann.]]&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
&lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'' Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con [[memoria distribuida]] y [[memoria compartida]] o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Escalabilidad_(inform%C3%A1tica)&amp;diff=3991805</id>
		<title>Escalabilidad (informática)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Escalabilidad_(inform%C3%A1tica)&amp;diff=3991805"/>
		<updated>2021-08-02T16:20:41Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: Página creada con «{{Definición |nombre=Escalabilidad |imagen= |tamaño= |concepto=En términos de paralelismo o multiprogramación la escalabilidad es una magnitud que refleja si un sistema…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Escalabilidad&lt;br /&gt;
|imagen=&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto=En términos de paralelismo o multiprogramación la escalabilidad es una magnitud que refleja si un sistema paralelo es escalable o no.&lt;br /&gt;
}}&lt;br /&gt;
La '''escalabilidad''' en términos de multiprogramación o programación paralela es una magnitud que refleja si un sistema paralelo es escalable o no. Un sistema paralelo se dice que escalable si y solo si dado un rango de [[CPU (unidad central de procesamiento)|procesadores]] [1...''n''] la [[eficiencia]] E(''n'') del propio sistema se mantiene constante y en todo momento por encima de ''0.5''. Normalmente todos los sistemas informáticos tienen un determinado número de procesadores a partir del cual la eficiencia comienza a disminuir más o menos de manera brusca. Se puede decir que un sistema es más escalable que otro si dicho número de procesadores en los que la eficiencia disminuye es menor que el otro.&amp;lt;ref&amp;gt;[Hwa93]: Kai Hwang. Advanced computer architecture: Parallelism, scalability, programmability. McGraw-Hill, 1993. BIBLIOTECA: CI 681.3 HWA (3 copias), CI-IFIC (1 copia), CI-Informática (1 copia).&amp;lt;/ref&amp;gt;&lt;br /&gt;
Es un error, bastante común, confundir el término &amp;quot;escalable&amp;quot; con &amp;quot;ampliable&amp;quot;. Un sistema informático es ampliable si se le pueden colocar más módulos físicamente (más memoria,  más tarjetas de entrada/salida, etc...). Que un sistema sea ampliable no signfica que sea escalable, pues la eficiencia no tiene porque mantenerse constante al ampliar el sistema y por consguiente podría no ser escalable.&amp;lt;ref&amp;gt;NAIOUF, Marcelo; DE GIUSTI, Armando Eduardo. Métricas del Paralelismo y Balance de carga en Sistemas Paralelos. En V Workshop de Investigadores en Ciencias de la Computación. 2003.&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
Veamos un ejemplo&amp;lt;ref&amp;gt;https://www.uv.es/varnau/OC_T4.pdf&amp;lt;/ref&amp;gt; en el cual se observa como un sistema pierde eficiencia a medida que se agregan más procesadores:&lt;br /&gt;
&lt;br /&gt;
'''Problema:'''Sea un programa informático que posee un tiempo de ejecución de 100 unidades de tiempo(por ejemplo segundos). El 80 % del código de dicho programa es perfecta y absolutamente [[paralelizable]]. Se pide calcular la [[Eficiencia]] y el [[Rendimiento]] de dicho programa cuando se está ejecutando sobre {1, 2, 4, 8, 16} procesadores. Decir hasta que punto el sistema es escalable. &lt;br /&gt;
En la siguiente gráfica se muestra un estudio del rendimiento de dicho programa:&lt;br /&gt;
[[Archivo:Problema1.png|miniaturadeimagen|centro| ]]&lt;br /&gt;
Luego calculando la eficiencia en base al conjunto de procesadores se tiene:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| N= || 2 || 4 || 8 || 16&lt;br /&gt;
|-&lt;br /&gt;
| S(n)= || 100/(40+20)=1.666 || 2.5 || 3.333 || 4&lt;br /&gt;
|-&lt;br /&gt;
| E(n)= || 100/(2*60)=0.83=1666/2 || 0.625 || 0.416 || 0.25&lt;br /&gt;
|}&lt;br /&gt;
Por lo que se puede deducir que el sistema se mantiene escalable (ejecutando este programa) en el rango de procesadores [1...4] . Si es superior a esa cantidad de procesadores el sistema pierde eficiencia y por tanto no es escalable.&lt;br /&gt;
==Vease además==&lt;br /&gt;
*Eficiencia(informática)&lt;br /&gt;
==Fuentes==&lt;br /&gt;
[[Categoría:Informática]][[Categoría:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Problema1.png&amp;diff=3991756</id>
		<title>Archivo:Problema1.png</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Problema1.png&amp;diff=3991756"/>
		<updated>2021-08-02T15:31:09Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Información de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Licencia ==&lt;br /&gt;
{{CC}}&lt;br /&gt;
== Fuente: ==&lt;br /&gt;
https://www.uv.es/varnau/OC_T4.pdf&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Usuario:Kenrios&amp;diff=3850897</id>
		<title>Usuario:Kenrios</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Usuario:Kenrios&amp;diff=3850897"/>
		<updated>2021-01-28T15:08:07Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha_Usuario_(avanzada)&lt;br /&gt;
|imagen=&lt;br /&gt;
|apellidos=Ruiz Madruga&lt;br /&gt;
|nombre=Alejandro&lt;br /&gt;
|nivel=Superior&lt;br /&gt;
|título=Ingeniero en Ciencias Informáticas&lt;br /&gt;
|postgrado=&lt;br /&gt;
|temas=Informática&lt;br /&gt;
|institución=Joven Club de Computación y Electrónica&lt;br /&gt;
|municipio=Cerro&lt;br /&gt;
|provincia=La Habana&lt;br /&gt;
|país=Cuba&lt;br /&gt;
|seguimiento=&lt;br /&gt;
|colaboradores=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848531</id>
		<title>OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848531"/>
		<updated>2021-01-24T14:31:24Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=OpenMP&lt;br /&gt;
|imagen=openmp.png&lt;br /&gt;
|tamaño=200px&lt;br /&gt;
|concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;'''OpenMP''' es una [[API|interfaz de programación de aplicaciones]] (API por sus siglas en inglés) para la programación paralela en diferentes plataformas. Esta permite añadir procesamiento concurrente a programas codificados en [[C (lenguaje de programación)|C]], [[C++]] y [[Fortran]] sobre la base del modelo de ejecución fork/join. Esta API esta disponible en múltiples plataformas como [[Windows|Microsoft Windows]] o [[Linux]]. Consiste en un conjunto [[Operador de preproceso|directivas de compilador]], rutinas de biblioteca y [[variables de entorno]] que permiten al programador controlar el comportamiento de un programa en tiempo de ejecución. &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Su diseño, implementación y soporte está dirigido por un conjunto de fabricantes de software y hardware, siendo portable y escalable es una buena alternativa para la programación paralela en plataformas que varían desde una computador de escritorio (PC) hasta las supercomputadoras. Un sistema híbrido como los [[Cluster (computadoras)|clústers de computadoras]] puede programarse usando OpenMP y MPI(Interfaz de Paso de Mensaje) ya que esta arquitectura posee memoria compartida y distribuida, o también se podría usar una extensión de OpenMP para la programación sobre memoria distribuida.&amp;lt;ref&amp;gt;CHANDRA, Rohit, et al. Parallel programming in OpenMP. Morgan kaufmann, 2001.&amp;lt;/ref&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
== Modelo de ejecución ==&lt;br /&gt;
&amp;lt;br&amp;gt;Se entiende como modelo de ejecución fork/join una técnica heredada de sistemas [[Unix]] en la que un proceso se divide en '''k''' hilos menores (fork), luego cada uno de estos hilos arroja ciertos &amp;quot;resultados&amp;quot; los cuales son unificados en uno sólo (join). &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Cuando se incluye una directiva de compilador &amp;lt;code&amp;gt;#openmp&amp;lt;/code&amp;gt; esto implica que en el bloque de código se aplicarán una serie de mecanismos de sincronización. Esto quiere decir que automáticamente el código sera marcado como paralelo y, en dependencia de la configuración de la directiva, se lanzarán una serie de hilos y al final habrá una barrera en la que un hilo debe esperar a que el resto termine para continuar la ejecución (a no ser que se específique con la directiva '''nowait''', en cuyo caso los hilos continuarán)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Ahora bien, el modelo además incluye mecanismos de paralelismo de &amp;quot;tareas&amp;quot;. Recordemos que ningún proceso puede ejecutarse si todas sus dependencias no estan satisfechas por lo que en estos casos OpenMP implementa un mecanismo en el que los procesos no se ejecutan hasta que estos estén disponibles. A este estilo de paralelismo se le llama '''asíncrono''' ya que no es estrictamente necesario que se implementen barreras en la que los hilos tengan que esperar hasta que el resto termine la ejecución del bloque de código. Si se usan procesos con dependencias se implementa un grafo de dependencia en el que se puede definir el orden de ejecución de los procesos que poseen esta necesidad.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintáxis básica ==&lt;br /&gt;
La sintáxis básica de una directiva de OpenMP para [[C (lenguaje de programación)|C]] y [[C++]] es la siguiente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# pragma omp &amp;lt;directiva&amp;gt; [cláusula [ , ...] ...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
para [[Fortran]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
!$OMP  PARALLEL &amp;lt;directiva&amp;gt; [cláusulas]&lt;br /&gt;
    [ bloque de código ]&lt;br /&gt;
!$OMP END &amp;lt;directiva&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se verán algunas de las directivas que pueden ser usadas en OpenMP&lt;br /&gt;
&amp;lt;ref&amp;gt;[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf &amp;quot;OpenMP 5.1 Specifications&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Directivas==&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel&amp;lt;/code&amp;gt;: Esta directiva indica que el código en cuestión puede ser ejecutado por varios hilos. Cada uno de los hilos se dividen en tareas implícitas que le son asignadas. Este es un ejemplo sencillo de un código de bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ejecutado con esta directiva&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
    for (i=1; i&amp;lt;n; i++)&lt;br /&gt;
        b[i] = (a[i] + a[i-1]) / 2.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;: Esta directiva indica que el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; subsiguiente ejecuta una o más partes de iteracciones divididas entre los hilos. Un hilo ejecuta una parte de las iteraciones del bucle (convirtiéndose en una tarea interna explícita) y la cantidad de hilos en los que se divide la ejecución es determinado por la configuración de esta directiva.&lt;br /&gt;
* &amp;lt;code&amp;gt;section&amp;lt;/code&amp;gt; y '''sections''': Esta directiva indica que varias secciones de código pueden ejecutarse en paralelo pero por un único hilo.&lt;br /&gt;
* &amp;lt;code&amp;gt;single&amp;lt;/code&amp;gt;:Esta directiva indica que el bloque de código solo puede ejecutarse por un único hilo que no tiene porque ser el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;: Esta directiva define que el código solo puede ser ejecutado por el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;critical&amp;lt;/code&amp;gt;:Interesante directiva que define que el bloque de código subsiguiente es una zona crítica y que por consiguiente solo puede estarla ejecutando un solo hilo y los otros que así lo deseen deben esperar hasta que se cumplan las condiciones de carrera.&lt;br /&gt;
&lt;br /&gt;
A continuación veremos algunas claúsulas usadas en la declaración de la directiva.&lt;br /&gt;
&lt;br /&gt;
== Claúsulas ==&lt;br /&gt;
* &amp;lt;code&amp;gt;shared(variable1,...,variablen)&amp;lt;/code&amp;gt;: Define que las variables o datos pueden ser visibles y accesibles por todos los hilos en ejecución. Por defecto todas las variables que se encuentran en la región paralela son compartidas excepto el contador de las iteraciones.&lt;br /&gt;
* &amp;lt;code&amp;gt;private(variable1,...,variablen)&amp;lt;/code&amp;gt;: Las variables o datos declarados en la claúsula son almacenados en el espacio local del hilo (comúnmente en la pila), lo que quiere decir que el hilo los úsara como variable temporal y por tanto solo él tendrá acceso al mismo. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Informática]][[Category:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Bifurcaci%C3%B3n_(desarrollo_de_software)&amp;diff=3848529</id>
		<title>Bifurcación (desarrollo de software)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Bifurcaci%C3%B3n_(desarrollo_de_software)&amp;diff=3848529"/>
		<updated>2021-01-24T14:27:25Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Bifurcación (ingeniería de software)&lt;br /&gt;
|imagen=&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto= En ingeniería de software se considera una bifurcación a la división de un proyecto existente en varios proyectos independientes entre sí.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
En ingeniería de software se considera una '''bifurcación''' (fork por sus siglas inglés) al desarrollo de un software tomando como base el código fuente existente o bien a la ramificación de un proyecto de software en varios proyectos independientes entre sí y que cuentan con objetivos o desarrolladores diferentes. Como resultado de una bifurcación pueden surgir nuevos proyectos de uno previo que ya existe, los cuales intentan cubrir varias necesidades distintas aunque similares o bien implementar diferentes soluciones con el fin de abordar los mismos problemas pudiendo generar competencia entre ellos.&lt;br /&gt;
Ejemplos de bifurcaciones pueden ser la Enciclopedia Libre Universal en Español(proyecto que se separó de la Wikipedia en español) &amp;lt;ref&amp;gt;http://enciclopedia.us.es/index.php/Enciclopedia_Libre_Universal_en_Espa%C3%B1ol&amp;lt;/ref&amp;gt;, los sistemas operativos Android, Debian y Ubuntu (basados en GNU/Linux) las suites de [[ofimática]] [[LibreOffice]] y AndrOpen Office (derivadas de OpenOffice) y las criptomonedas Bitcoin Cash (derivación de la red Bitcoin) y Litecoin (tomando como fundamento el código fuente de Bitcoin)&lt;br /&gt;
&lt;br /&gt;
==Contextos==&lt;br /&gt;
===Software libre===&lt;br /&gt;
En el contexto de software libre las bifurcaciones surgen por diferencias en la concepción de los objetivos o bien por choque de personalidades. En una bifurcación de este tipo ambos lados asumen derechos de autor idénticos pero típicamente el grupo con mayor tamaño o bien el grupo que contiene al líder del proyecto conservará el nombre original. Ahora bien, dados los términos y libertades de la licencia del software libre cada desarrollador de la comunidad puede elegir mantenerse en el proyecto original o bien cambiarse para la versión bifurcada que puede poseer una forma de gestión diferente. Además tomando en cuenta las libertades del software libre se puede trasladar las mejoras de una versión a la otra cuando se desee. Se puede entonces obtener como resultado dos proyectos que evolucionan en paralelo cada uno especializado en adaptarse a unas condiciones distintas del otro.&amp;lt;ref&amp;gt;https://esacademic.com/dic.nsf/eswiki/172751/&amp;lt;/ref&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Software privativo===&lt;br /&gt;
En proyectos bajo licencia propietaria las bifurcaciones se llevan a cabo para crear versiones del mismo software que funcionen en diversos sistemas operativos, aumentando así su alcance mercantil. Estos softwares suelen tener las mismas características facilitando a los usuarios su uso en diferentes sistemas.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==Fuentes==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
[[Category:Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Bifurcaci%C3%B3n_(desarrollo_de_software)&amp;diff=3848528</id>
		<title>Bifurcación (desarrollo de software)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Bifurcaci%C3%B3n_(desarrollo_de_software)&amp;diff=3848528"/>
		<updated>2021-01-24T14:25:59Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: Página creada con «{{Definición |nombre=Bifurcación (ingeniería de software) |imagen= |tamaño= |concepto= En ingeniería de software se considera una bifurcación a la división de un pro…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Bifurcación (ingeniería de software)&lt;br /&gt;
|imagen=&lt;br /&gt;
|tamaño=&lt;br /&gt;
|concepto= En ingeniería de software se considera una bifurcación a la división de un proyecto existente en varios proyectos independientes entre sí.&lt;br /&gt;
}}&lt;br /&gt;
En ingeniería de software se considera una '''bifurcación''' (fork por sus siglas inglés) al desarrollo de un software tomando como base el código fuente existente o bien a la ramificación de un proyecto de software en varios proyectos independientes entre sí y que cuentan con objetivos o desarrolladores diferentes. Como resultado de una bifurcación pueden surgir nuevos proyectos de uno previo que ya existe, los cuales intentan cubrir varias necesidades distintas aunque similares o bien implementar diferentes soluciones con el fin de abordar los mismos problemas pudiendo generar competencia entre ellos.&lt;br /&gt;
Ejemplos de bifurcaciones pueden ser la Enciclopedia Libre Universal en Español(proyecto que se separó de la Wikipedia en español) &amp;lt;ref&amp;gt;http://enciclopedia.us.es/index.php/Enciclopedia_Libre_Universal_en_Espa%C3%B1ol&amp;lt;/ref&amp;gt;, los sistemas operativos Android, Debian y Ubuntu (basados en GNU/Linux) las suites de [[ofimática]] [[LibreOffice]] y AndrOpen Office (derivadas de OpenOffice) y las criptomonedas Bitcoin Cash (derivación de la red Bitcoin) y Litecoin (tomando como fundamento el código fuente de Bitcoin)&lt;br /&gt;
&lt;br /&gt;
==Contextos==&lt;br /&gt;
===Software libre===&lt;br /&gt;
En el contexto de software libre las bifurcaciones surgen por diferencias en la concepción de los objetivos o bien por choque de personalidades. En una bifurcación de este tipo ambos lados asumen derechos de autor idénticos pero típicamente el grupo con mayor tamaño o bien el grupo que contiene al líder del proyecto conservará el nombre original. Ahora bien, dados los términos y libertades de la licencia del software libre cada desarrollador de la comunidad puede elegir mantenerse en el proyecto original o bien cambiarse para la versión bifurcada que puede poseer una forma de gestión diferente. Además tomando en cuenta las libertades del software libre se puede trasladar las mejoras de una versión a la otra cuando se desee. Se puede entonces obtener como resultado dos proyectos que evolucionan en paralelo cada uno especializado en adaptarse a unas condiciones distintas del otro.&amp;lt;ref&amp;gt;https://esacademic.com/dic.nsf/eswiki/172751/&amp;lt;/ref&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Software privativo===&lt;br /&gt;
En proyectos bajo licencia propietaria las bifurcaciones se llevan a cabo para crear versiones del mismo software que funcionen en diversos sistemas operativos, aumentando así su alcance mercantil. Estos softwares suelen tener las mismas características facilitando a los usuarios su uso en diferentes sistemas.&lt;br /&gt;
==Fuentes==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
[[Category:Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848513</id>
		<title>OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848513"/>
		<updated>2021-01-24T13:16:21Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=OpenMP&lt;br /&gt;
|imagen=openmp.png&lt;br /&gt;
|tamaño=200px&lt;br /&gt;
|concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;'''OpenMP''' es una [[API|interfaz de programación de aplicaciones]] (API por sus siglas en inglés) para la programación paralela en diferentes plataformas. Esta permite añadir procesamiento concurrente a programas codificados en [[C (lenguaje de programación)|C]], [[C++]] y [[Fortran]] sobre la base del modelo de ejecución fork/join. Esta API esta disponible en múltiples plataformas como [[Windows|Microsoft Windows]] o [[Linux]]. Consiste en un conjunto [[Operador de preproceso|directivas de compilador]], rutinas de biblioteca y [[variables de entorno]] que permiten al programador controlar el comportamiento de un programa en tiempo de ejecución. &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Su diseño, implementación y soporte está dirigido por un conjunto de fabricantes de software y hardware, siendo portable y escalable es una buena alternativa para la programación paralela en plataformas que varían desde una computador de escritorio (PC) hasta las supercomputadoras. Un sistema híbrido como los [[Cluster (computadoras)|clústers de computadoras]] puede programarse usando OpenMP y MPI(Interfaz de Paso de Mensaje) ya que esta arquitectura posee memoria compartida y distribuida, o también se podría usar una extensión de OpenMP para la programación sobre memoria distribuida.&amp;lt;ref&amp;gt;CHANDRA, Rohit, et al. Parallel programming in OpenMP. Morgan kaufmann, 2001.&amp;lt;/ref&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
== Modelo de ejecución ==&lt;br /&gt;
&amp;lt;br&amp;gt;Se entiende como modelo de ejecución fork/join una técnica heredada de sistemas [[Unix]] en la que un proceso se divide en '''k''' hilos menores (fork), luego cada uno de estos hilos arroja ciertos &amp;quot;resultados&amp;quot; los cuales son unificados en uno sólo (join). &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Cuando se incluye una directiva de compilador &amp;lt;code&amp;gt;#openmp&amp;lt;/code&amp;gt; esto implica que en el bloque de código se aplicarán una serie de mecanismos de sincronización. Esto quiere decir que automáticamente el código sera marcado como paralelo y, en dependencia de la configuración de la directiva, se lanzarán una serie de hilos y al final habrá una barrera en la que un hilo debe esperar a que el resto termine para continuar la ejecución (a no ser que se específique con la directiva '''nowait''', en cuyo caso los hilos continuarán)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Ahora bien, el modelo además incluye mecanismos de paralelismo de &amp;quot;tareas&amp;quot;. Recordemos que ningún proceso puede ejecutarse si todas sus dependencias no estan satisfechas por lo que en estos casos OpenMP implementa un mecanismo en el que los procesos no se ejecutan hasta que estos estén disponibles. A este estilo de paralelismo se le llama '''asíncrono''' ya que no es estrictamente necesario que se implementen barreras en la que los hilos tengan que esperar hasta que el resto termine la ejecución del bloque de código. Si se usan procesos con dependencias se implementa un grafo de dependencia en el que se puede definir el orden de ejecución de los procesos que poseen esta necesidad.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintáxis básica ==&lt;br /&gt;
La sintáxis básica de una directiva de OpenMP para [[C (lenguaje de programación)|C]] y [[C++]] es la siguiente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# pragma omp &amp;lt;directiva&amp;gt; [cláusula [ , ...] ...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
para [[Fortran]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
!$OMP  PARALLEL &amp;lt;directiva&amp;gt; [cláusulas]&lt;br /&gt;
    [ bloque de código ]&lt;br /&gt;
!$OMP END &amp;lt;directiva&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se verán algunas de las directivas que pueden ser usadas en OpenMP&lt;br /&gt;
&amp;lt;ref&amp;gt;[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf &amp;quot;OpenMP 5.1 Specifications&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Directivas==&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel&amp;lt;/code&amp;gt;: Esta directiva indica que el código en cuestión puede ser ejecutado por varios hilos. Cada uno de los hilos se dividen en tareas implícitas que le son asignadas. Este es un ejemplo sencillo de un código de bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ejecutado con esta directiva&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
    for (i=1; i&amp;lt;n; i++)&lt;br /&gt;
        b[i] = (a[i] + a[i-1]) / 2.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;: Esta directiva indica que el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; subsiguiente ejecuta una o más partes de iteracciones divididas entre los hilos. Un hilo ejecuta una parte de las iteraciones del bucle (convirtiéndose en una tarea interna explícita) y la cantidad de hilos en los que se divide la ejecución es determinado por la configuración de esta directiva.&lt;br /&gt;
* &amp;lt;code&amp;gt;section&amp;lt;/code&amp;gt; y '''sections''': Esta directiva indica que varias secciones de código pueden ejecutarse en paralelo pero por un único hilo.&lt;br /&gt;
* &amp;lt;code&amp;gt;single&amp;lt;/code&amp;gt;:Esta directiva indica que el bloque de código solo puede ejecutarse por un único hilo que no tiene porque ser el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;: Esta directiva define que el código solo puede ser ejecutado por el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;critical&amp;lt;/code&amp;gt;:Interesante directiva que define que el bloque de código subsiguiente es una zona crítica y que por consiguiente solo puede estarla ejecutando un solo hilo y los otros que así lo deseen deben esperar hasta que se cumplan las condiciones de carrera.&lt;br /&gt;
&lt;br /&gt;
A continuación veremos algunas claúsulas usadas en la declaración de la directiva.&lt;br /&gt;
&lt;br /&gt;
== Claúsulas ==&lt;br /&gt;
* &amp;lt;code&amp;gt;shared(variable1,...,variablen)&amp;lt;/code&amp;gt;: Define que las variables o datos pueden ser visibles y accesibles por todos los hilos en ejecución. Por defecto todas las variables que se encuentran en la región paralela son compartidas excepto el contador de las iteraciones.&lt;br /&gt;
* &amp;lt;code&amp;gt;private(variable1,...,variablen)&amp;lt;/code&amp;gt;: Las variables o datos declarados en la claúsula son almacenados en el espacio local del hilo (comúnmente en la pila), lo que quiere decir que el hilo los úsara como variable temporal y por tanto solo él tendrá acceso al mismo. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Informática]][[Category:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848512</id>
		<title>OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848512"/>
		<updated>2021-01-24T13:11:53Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: /* Modelo de ejecución */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=OpenMP&lt;br /&gt;
|imagen=openmp.png&lt;br /&gt;
|tamaño=200px&lt;br /&gt;
|concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;'''OpenMP''' es una [[API|interfaz de programación de aplicaciones]] (API por sus siglas en inglés) para la programación paralela en diferentes plataformas. Esta permite añadir procesamiento concurrente a programas codificados en [[C (lenguaje de programación)|C]], [[C++]] y [[Fortran]] sobre la base del modelo de ejecución fork/join. Esta API esta disponible en múltiples plataformas como [[Windows|Microsoft Windows]] o [[Linux]]. Consiste en un conjunto directivas de compilador, rutinas de biblioteca y [[variables de entorno]] que permiten al programador controlar el comportamiento de un programa en tiempo de ejecución. &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Su diseño, implementación y soporte está dirigido por un conjunto de fabricantes de software y hardware, siendo portable y escalable es una buena alternativa para la programación paralela en plataformas que varían desde una computador de escritorio (PC) hasta las supercomputadoras. Un sistema híbrido como los [[Cluster (computadoras)|clústers de computadoras]] puede programarse usando OpenMP y MPI(Interfaz de Paso de Mensaje) ya que esta arquitectura posee memoria compartida y distribuida, o también se podría usar una extensión de OpenMP para la programación sobre memoria distribuida.&amp;lt;ref&amp;gt;CHANDRA, Rohit, et al. Parallel programming in OpenMP. Morgan kaufmann, 2001.&amp;lt;/ref&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
== Modelo de ejecución ==&lt;br /&gt;
&amp;lt;br&amp;gt;Se entiende como modelo de ejecución fork/join una técnica heredada de sistemas [[Unix]] en la que un proceso se divide en '''k''' hilos menores (fork), luego cada uno de estos hilos arroja ciertos &amp;quot;resultados&amp;quot; los cuales son unificados en uno sólo (join). &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Cuando se incluye una directiva de compilador &amp;lt;code&amp;gt;#openmp&amp;lt;/code&amp;gt; esto implica que en el bloque de código se aplicarán una serie de mecanismos de sincronización. Esto quiere decir que automáticamente el código sera marcado como paralelo y, en dependencia de la configuración de la directiva, se lanzarán una serie de hilos y al final habrá una barrera en la que un hilo debe esperar a que el resto termine para continuar la ejecución (a no ser que se específique con la directiva '''nowait''', en cuyo caso los hilos continuarán)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Ahora bien, el modelo además incluye mecanismos de paralelismo de &amp;quot;tareas&amp;quot;. Recordemos que ningún proceso puede ejecutarse si todas sus dependencias no estan satisfechas por lo que en estos casos OpenMP implementa un mecanismo en el que los procesos no se ejecutan hasta que estos estén disponibles. A este estilo de paralelismo se le llama '''asíncrono''' ya que no es estrictamente necesario que se implementen barreras en la que los hilos tengan que esperar hasta que el resto termine la ejecución del bloque de código. Si se usan procesos con dependencias se implementa un grafo de dependencia en el que se puede definir el orden de ejecución de los procesos que poseen esta necesidad.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintáxis básica ==&lt;br /&gt;
La sintáxis básica de una directiva de OpenMP para [[C (lenguaje de programación)|C]] y [[C++]] es la siguiente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# pragma omp &amp;lt;directiva&amp;gt; [cláusula [ , ...] ...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
para [[Fortran]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
!$OMP  PARALLEL &amp;lt;directiva&amp;gt; [cláusulas]&lt;br /&gt;
    [ bloque de código ]&lt;br /&gt;
!$OMP END &amp;lt;directiva&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se verán algunas de las directivas que pueden ser usadas en OpenMP&lt;br /&gt;
&amp;lt;ref&amp;gt;[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf &amp;quot;OpenMP 5.1 Specifications&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Directivas==&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel&amp;lt;/code&amp;gt;: Esta directiva indica que el código en cuestión puede ser ejecutado por varios hilos. Cada uno de los hilos se dividen en tareas implícitas que le son asignadas. Este es un ejemplo sencillo de un código de bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ejecutado con esta directiva&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
    for (i=1; i&amp;lt;n; i++)&lt;br /&gt;
        b[i] = (a[i] + a[i-1]) / 2.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;: Esta directiva indica que el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; subsiguiente ejecuta una o más partes de iteracciones divididas entre los hilos. Un hilo ejecuta una parte de las iteraciones del bucle (convirtiéndose en una tarea interna explícita) y la cantidad de hilos en los que se divide la ejecución es determinado por la configuración de esta directiva.&lt;br /&gt;
* &amp;lt;code&amp;gt;section&amp;lt;/code&amp;gt; y '''sections''': Esta directiva indica que varias secciones de código pueden ejecutarse en paralelo pero por un único hilo.&lt;br /&gt;
* &amp;lt;code&amp;gt;single&amp;lt;/code&amp;gt;:Esta directiva indica que el bloque de código solo puede ejecutarse por un único hilo que no tiene porque ser el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;: Esta directiva define que el código solo puede ser ejecutado por el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;critical&amp;lt;/code&amp;gt;:Interesante directiva que define que el bloque de código subsiguiente es una zona crítica y que por consiguiente solo puede estarla ejecutando un solo hilo y los otros que así lo deseen deben esperar hasta que se cumplan las condiciones de carrera.&lt;br /&gt;
&lt;br /&gt;
A continuación veremos algunas claúsulas usadas en la declaración de la directiva.&lt;br /&gt;
&lt;br /&gt;
== Claúsulas ==&lt;br /&gt;
* &amp;lt;code&amp;gt;shared(variable1,...,variablen)&amp;lt;/code&amp;gt;: Define que las variables o datos pueden ser visibles y accesibles por todos los hilos en ejecución. Por defecto todas las variables que se encuentran en la región paralela son compartidas excepto el contador de las iteraciones.&lt;br /&gt;
* &amp;lt;code&amp;gt;private(variable1,...,variablen)&amp;lt;/code&amp;gt;: Las variables o datos declarados en la claúsula son almacenados en el espacio local del hilo (comúnmente en la pila), lo que quiere decir que el hilo los úsara como variable temporal y por tanto solo él tendrá acceso al mismo. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Informática]][[Category:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848511</id>
		<title>OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848511"/>
		<updated>2021-01-24T13:10:48Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=OpenMP&lt;br /&gt;
|imagen=openmp.png&lt;br /&gt;
|tamaño=200px&lt;br /&gt;
|concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;'''OpenMP''' es una [[API|interfaz de programación de aplicaciones]] (API por sus siglas en inglés) para la programación paralela en diferentes plataformas. Esta permite añadir procesamiento concurrente a programas codificados en [[C (lenguaje de programación)|C]], [[C++]] y [[Fortran]] sobre la base del modelo de ejecución fork/join. Esta API esta disponible en múltiples plataformas como [[Windows|Microsoft Windows]] o [[Linux]]. Consiste en un conjunto directivas de compilador, rutinas de biblioteca y [[variables de entorno]] que permiten al programador controlar el comportamiento de un programa en tiempo de ejecución. &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Su diseño, implementación y soporte está dirigido por un conjunto de fabricantes de software y hardware, siendo portable y escalable es una buena alternativa para la programación paralela en plataformas que varían desde una computador de escritorio (PC) hasta las supercomputadoras. Un sistema híbrido como los [[Cluster (computadoras)|clústers de computadoras]] puede programarse usando OpenMP y MPI(Interfaz de Paso de Mensaje) ya que esta arquitectura posee memoria compartida y distribuida, o también se podría usar una extensión de OpenMP para la programación sobre memoria distribuida.&amp;lt;ref&amp;gt;CHANDRA, Rohit, et al. Parallel programming in OpenMP. Morgan kaufmann, 2001.&amp;lt;/ref&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
== Modelo de ejecución ==&lt;br /&gt;
&amp;lt;br&amp;gt;Se entiende como modelo de ejecución fork/join una técnica heredada de sistemas Unix en la que un proceso se divide en '''k''' hilos menores (fork), luego cada uno de estos hilos arroja ciertos &amp;quot;resultados&amp;quot; los cuales son unificados en uno sólo (join). &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Cuando se incluye una directiva de compilador &amp;lt;code&amp;gt;#openmp&amp;lt;/code&amp;gt; esto implica que en el bloque de código se aplicarán una serie de mecanismos de sincronización. Esto quiere decir que automáticamente el código sera marcado como paralelo y, en dependencia de la configuración de la directiva, se lanzarán una serie de hilos y al final habrá una barrera en la que un hilo debe esperar a que el resto termine para continuar la ejecución (a no ser que se específique con la directiva '''nowait''', en cuyo caso los hilos continuarán)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Ahora bien, el modelo además incluye mecanismos de paralelismo de &amp;quot;tareas&amp;quot;. Recordemos que ningún proceso puede ejecutarse si todas sus dependencias no estan satisfechas por lo que en estos casos OpenMP implementa un mecanismo en el que los procesos no se ejecutan hasta que estos estén disponibles. A este estilo de paralelismo se le llama '''asíncrono''' ya que no es estrictamente necesario que se implementen barreras en la que los hilos tengan que esperar hasta que el resto termine la ejecución del bloque de código. Si se usan procesos con dependencias se implementa un grafo de dependencia en el que se puede definir el orden de ejecución de los procesos que poseen esta necesidad.&amp;lt;/br&amp;gt;&lt;br /&gt;
== Sintáxis básica ==&lt;br /&gt;
La sintáxis básica de una directiva de OpenMP para [[C (lenguaje de programación)|C]] y [[C++]] es la siguiente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# pragma omp &amp;lt;directiva&amp;gt; [cláusula [ , ...] ...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
para [[Fortran]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
!$OMP  PARALLEL &amp;lt;directiva&amp;gt; [cláusulas]&lt;br /&gt;
    [ bloque de código ]&lt;br /&gt;
!$OMP END &amp;lt;directiva&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se verán algunas de las directivas que pueden ser usadas en OpenMP&lt;br /&gt;
&amp;lt;ref&amp;gt;[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf &amp;quot;OpenMP 5.1 Specifications&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Directivas==&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel&amp;lt;/code&amp;gt;: Esta directiva indica que el código en cuestión puede ser ejecutado por varios hilos. Cada uno de los hilos se dividen en tareas implícitas que le son asignadas. Este es un ejemplo sencillo de un código de bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ejecutado con esta directiva&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
    for (i=1; i&amp;lt;n; i++)&lt;br /&gt;
        b[i] = (a[i] + a[i-1]) / 2.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;: Esta directiva indica que el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; subsiguiente ejecuta una o más partes de iteracciones divididas entre los hilos. Un hilo ejecuta una parte de las iteraciones del bucle (convirtiéndose en una tarea interna explícita) y la cantidad de hilos en los que se divide la ejecución es determinado por la configuración de esta directiva.&lt;br /&gt;
* &amp;lt;code&amp;gt;section&amp;lt;/code&amp;gt; y '''sections''': Esta directiva indica que varias secciones de código pueden ejecutarse en paralelo pero por un único hilo.&lt;br /&gt;
* &amp;lt;code&amp;gt;single&amp;lt;/code&amp;gt;:Esta directiva indica que el bloque de código solo puede ejecutarse por un único hilo que no tiene porque ser el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;: Esta directiva define que el código solo puede ser ejecutado por el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;critical&amp;lt;/code&amp;gt;:Interesante directiva que define que el bloque de código subsiguiente es una zona crítica y que por consiguiente solo puede estarla ejecutando un solo hilo y los otros que así lo deseen deben esperar hasta que se cumplan las condiciones de carrera.&lt;br /&gt;
&lt;br /&gt;
A continuación veremos algunas claúsulas usadas en la declaración de la directiva.&lt;br /&gt;
&lt;br /&gt;
== Claúsulas ==&lt;br /&gt;
* &amp;lt;code&amp;gt;shared(variable1,...,variablen)&amp;lt;/code&amp;gt;: Define que las variables o datos pueden ser visibles y accesibles por todos los hilos en ejecución. Por defecto todas las variables que se encuentran en la región paralela son compartidas excepto el contador de las iteraciones.&lt;br /&gt;
* &amp;lt;code&amp;gt;private(variable1,...,variablen)&amp;lt;/code&amp;gt;: Las variables o datos declarados en la claúsula son almacenados en el espacio local del hilo (comúnmente en la pila), lo que quiere decir que el hilo los úsara como variable temporal y por tanto solo él tendrá acceso al mismo. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Informática]][[Category:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848506</id>
		<title>OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848506"/>
		<updated>2021-01-24T13:06:52Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=OpenMP&lt;br /&gt;
|imagen=openmp.png&lt;br /&gt;
|tamaño=200px&lt;br /&gt;
|concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;'''OpenMP''' es una [[API|interfaz de programación de aplicaciones]] (API por sus siglas en inglés) para la programación paralela en diferentes plataformas. Esta permite añadir procesamiento concurrente a programas codificados en [[C (lenguaje de programación)|C]], [[C++]] y [[Fortran]] sobre la base del modelo de ejecución fork/join. Esta API esta disponible en múltiples plataformas como [[Windows|Microsoft Windows]] o [[Linux]]. Consiste en un conjunto directivas de compilador, rutinas de biblioteca y [[variables de entorno]] que permiten al programador controlar el comportamiento de un programa en tiempo de ejecución. &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Su diseño, implementación y soporte está dirigido por un conjunto de fabricantes de software y hardware, siendo portable y escalable es una buena alternativa para la programación paralela en plataformas que varían desde una computador de escritorio (PC) hasta las supercomputadoras. Un sistema híbrido como los clústers de computadoras puede programarse usando OpenMP y MPI(Interfaz de Paso de Mensaje) ya que esta arquitectura posee memoria compartida y distribuida, o también se podría usar una extensión de OpenMP para la programación sobre memoria distribuida.&amp;lt;ref&amp;gt;CHANDRA, Rohit, et al. Parallel programming in OpenMP. Morgan kaufmann, 2001.&amp;lt;/ref&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
== Modelo de ejecución ==&lt;br /&gt;
&amp;lt;br&amp;gt;Se entiende como modelo de ejecución fork/join una técnica heredada de sistemas Unix en la que un proceso se divide en '''k''' hilos menores (fork), luego cada uno de estos hilos arroja ciertos &amp;quot;resultados&amp;quot; los cuales son unificados en uno sólo (join). &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Cuando se incluye una directiva de compilador &amp;lt;code&amp;gt;#openmp&amp;lt;/code&amp;gt; esto implica que en el bloque de código se aplicarán una serie de mecanismos de sincronización. Esto quiere decir que automáticamente el código sera marcado como paralelo y, en dependencia de la configuración de la directiva, se lanzarán una serie de hilos y al final habrá una barrera en la que un hilo debe esperar a que el resto termine para continuar la ejecución (a no ser que se específique con la directiva '''nowait''', en cuyo caso los hilos continuarán)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Ahora bien, el modelo además incluye mecanismos de paralelismo de &amp;quot;tareas&amp;quot;. Recordemos que ningún proceso puede ejecutarse si todas sus dependencias no estan satisfechas por lo que en estos casos OpenMP implementa un mecanismo en el que los procesos no se ejecutan hasta que estos estén disponibles. A este estilo de paralelismo se le llama '''asíncrono''' ya que no es estrictamente necesario que se implementen barreras en la que los hilos tengan que esperar hasta que el resto termine la ejecución del bloque de código. Si se usan procesos con dependencias se implementa un grafo de dependencia en el que se puede definir el orden de ejecución de los procesos que poseen esta necesidad.&amp;lt;/br&amp;gt;&lt;br /&gt;
== Sintáxis básica ==&lt;br /&gt;
La sintáxis básica de una directiva de OpenMP para [[C (lenguaje de programación)|C]] y [[C++]] es la siguiente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# pragma omp &amp;lt;directiva&amp;gt; [cláusula [ , ...] ...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
para [[Fortran]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
!$OMP  PARALLEL &amp;lt;directiva&amp;gt; [cláusulas]&lt;br /&gt;
    [ bloque de código ]&lt;br /&gt;
!$OMP END &amp;lt;directiva&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se verán algunas de las directivas que pueden ser usadas en OpenMP&lt;br /&gt;
&amp;lt;ref&amp;gt;[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf &amp;quot;OpenMP 5.1 Specifications&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Directivas==&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel&amp;lt;/code&amp;gt;: Esta directiva indica que el código en cuestión puede ser ejecutado por varios hilos. Cada uno de los hilos se dividen en tareas implícitas que le son asignadas. Este es un ejemplo sencillo de un código de bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ejecutado con esta directiva&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
    for (i=1; i&amp;lt;n; i++)&lt;br /&gt;
        b[i] = (a[i] + a[i-1]) / 2.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;: Esta directiva indica que el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; subsiguiente ejecuta una o más partes de iteracciones divididas entre los hilos. Un hilo ejecuta una parte de las iteraciones del bucle (convirtiéndose en una tarea interna explícita) y la cantidad de hilos en los que se divide la ejecución es determinado por la configuración de esta directiva.&lt;br /&gt;
* &amp;lt;code&amp;gt;section&amp;lt;/code&amp;gt; y '''sections''': Esta directiva indica que varias secciones de código pueden ejecutarse en paralelo pero por un único hilo.&lt;br /&gt;
* &amp;lt;code&amp;gt;single&amp;lt;/code&amp;gt;:Esta directiva indica que el bloque de código solo puede ejecutarse por un único hilo que no tiene porque ser el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;: Esta directiva define que el código solo puede ser ejecutado por el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;critical&amp;lt;/code&amp;gt;:Interesante directiva que define que el bloque de código subsiguiente es una zona crítica y que por consiguiente solo puede estarla ejecutando un solo hilo y los otros que así lo deseen deben esperar hasta que se cumplan las condiciones de carrera.&lt;br /&gt;
&lt;br /&gt;
A continuación veremos algunas claúsulas usadas en la declaración de la directiva.&lt;br /&gt;
&lt;br /&gt;
== Claúsulas ==&lt;br /&gt;
* &amp;lt;code&amp;gt;shared(variable1,...,variablen)&amp;lt;/code&amp;gt;: Define que las variables o datos pueden ser visibles y accesibles por todos los hilos en ejecución. Por defecto todas las variables que se encuentran en la región paralela son compartidas excepto el contador de las iteraciones.&lt;br /&gt;
* &amp;lt;code&amp;gt;private(variable1,...,variablen)&amp;lt;/code&amp;gt;: Las variables o datos declarados en la claúsula son almacenados en el espacio local del hilo (comúnmente en la pila), lo que quiere decir que el hilo los úsara como variable temporal y por tanto solo él tendrá acceso al mismo. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Informática]][[Category:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848505</id>
		<title>OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3848505"/>
		<updated>2021-01-24T12:58:48Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=OpenMP&lt;br /&gt;
|imagen=openmp.png&lt;br /&gt;
|tamaño=200px&lt;br /&gt;
|concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;'''OpenMP''' es una interfaz de programación de aplicaciones (API por sus siglas en inglés) para la programación paralela en diferentes plataformas. Esta permite añadir procesamiento concurrente a programas codificados en [[C (lenguaje de programación)|C]], [[C++]] y [[Fortran]] sobre la base del modelo de ejecución fork/join. Esta API esta disponible en múltiples plataformas como [[Windows|Microsoft Windows]] o [[Linux]]. Consiste en un conjunto directivas de compilador, rutinas de biblioteca y variables de entorno que permiten al programador controlar el comportamiento de un programa en tiempo de ejecución. &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Su diseño, implementación y soporte está dirigido por un conjunto de fabricantes de software y hardware, siendo portable y escalable es una buena alternativa para la programación paralela en plataformas que varían desde una computador de escritorio (PC) hasta las supercomputadoras. Un sistema híbrido como los clústers de computadoras puede programarse usando OpenMP y MPI(Interfaz de Paso de Mensaje) ya que esta arquitectura posee memoria compartida y distribuida, o también se podría usar una extensión de OpenMP para la programación sobre memoria distribuida.&amp;lt;ref&amp;gt;CHANDRA, Rohit, et al. Parallel programming in OpenMP. Morgan kaufmann, 2001.&amp;lt;/ref&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
== Modelo de ejecución ==&lt;br /&gt;
&amp;lt;br&amp;gt;Se entiende como modelo de ejecución fork/join una técnica heredada de sistemas Unix en la que un proceso se divide en '''k''' hilos menores (fork), luego cada uno de estos hilos arroja ciertos &amp;quot;resultados&amp;quot; los cuales son unificados en uno sólo (join). &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Cuando se incluye una directiva de compilador &amp;lt;code&amp;gt;#openmp&amp;lt;/code&amp;gt; esto implica que en el bloque de código se aplicarán una serie de mecanismos de sincronización. Esto quiere decir que automáticamente el código sera marcado como paralelo y, en dependencia de la configuración de la directiva, se lanzarán una serie de hilos y al final habrá una barrera en la que un hilo debe esperar a que el resto termine para continuar la ejecución (a no ser que se específique con la directiva '''nowait''', en cuyo caso los hilos continuarán)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Ahora bien, el modelo además incluye mecanismos de paralelismo de &amp;quot;tareas&amp;quot;. Recordemos que ningún proceso puede ejecutarse si todas sus dependencias no estan satisfechas por lo que en estos casos OpenMP implementa un mecanismo en el que los procesos no se ejecutan hasta que estos estén disponibles. A este estilo de paralelismo se le llama '''asíncrono''' ya que no es estrictamente necesario que se implementen barreras en la que los hilos tengan que esperar hasta que el resto termine la ejecución del bloque de código. Si se usan procesos con dependencias se implementa un grafo de dependencia en el que se puede definir el orden de ejecución de los procesos que poseen esta necesidad.&amp;lt;/br&amp;gt;&lt;br /&gt;
== Sintáxis básica ==&lt;br /&gt;
La sintáxis básica de una directiva de OpenMP para [[C (lenguaje de programación)|C]] y [[C++]] es la siguiente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# pragma omp &amp;lt;directiva&amp;gt; [cláusula [ , ...] ...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
para [[Fortran]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
!$OMP  PARALLEL &amp;lt;directiva&amp;gt; [cláusulas]&lt;br /&gt;
    [ bloque de código ]&lt;br /&gt;
!$OMP END &amp;lt;directiva&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se verán algunas de las directivas que pueden ser usadas en OpenMP&lt;br /&gt;
&amp;lt;ref&amp;gt;[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf &amp;quot;OpenMP 5.1 Specifications&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Directivas==&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel&amp;lt;/code&amp;gt;: Esta directiva indica que el código en cuestión puede ser ejecutado por varios hilos. Cada uno de los hilos se dividen en tareas implícitas que le son asignadas. Este es un ejemplo sencillo de un código de bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ejecutado con esta directiva&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
    for (i=1; i&amp;lt;n; i++)&lt;br /&gt;
        b[i] = (a[i] + a[i-1]) / 2.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;: Esta directiva indica que el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; subsiguiente ejecuta una o más partes de iteracciones divididas entre los hilos. Un hilo ejecuta una parte de las iteraciones del bucle (convirtiéndose en una tarea interna explícita) y la cantidad de hilos en los que se divide la ejecución es determinado por la configuración de esta directiva.&lt;br /&gt;
* &amp;lt;code&amp;gt;section&amp;lt;/code&amp;gt; y '''sections''': Esta directiva indica que varias secciones de código pueden ejecutarse en paralelo pero por un único hilo.&lt;br /&gt;
* &amp;lt;code&amp;gt;single&amp;lt;/code&amp;gt;:Esta directiva indica que el bloque de código solo puede ejecutarse por un único hilo que no tiene porque ser el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;: Esta directiva define que el código solo puede ser ejecutado por el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;critical&amp;lt;/code&amp;gt;:Interesante directiva que define que el bloque de código subsiguiente es una zona crítica y que por consiguiente solo puede estarla ejecutando un solo hilo y los otros que así lo deseen deben esperar hasta que se cumplan las condiciones de carrera.&lt;br /&gt;
&lt;br /&gt;
A continuación veremos algunas claúsulas usadas en la declaración de la directiva.&lt;br /&gt;
&lt;br /&gt;
== Claúsulas ==&lt;br /&gt;
* &amp;lt;code&amp;gt;shared(variable1,...,variablen)&amp;lt;/code&amp;gt;: Define que las variables o datos pueden ser visibles y accesibles por todos los hilos en ejecución. Por defecto todas las variables que se encuentran en la región paralela son compartidas excepto el contador de las iteraciones.&lt;br /&gt;
* &amp;lt;code&amp;gt;private(variable1,...,variablen)&amp;lt;/code&amp;gt;: Las variables o datos declarados en la claúsula son almacenados en el espacio local del hilo (comúnmente en la pila), lo que quiere decir que el hilo los úsara como variable temporal y por tanto solo él tendrá acceso al mismo. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Informática]][[Category:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Discusi%C3%B3n:OpenMP&amp;diff=3847615</id>
		<title>Discusión:OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Discusi%C3%B3n:OpenMP&amp;diff=3847615"/>
		<updated>2021-01-22T22:10:49Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: Página creada con «==Discusión== Quisiera que pusieran aquí cosas que se le puede agregar al artículo o cosas que estén mal para rectificar»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Discusión==&lt;br /&gt;
Quisiera que pusieran aquí cosas que se le puede agregar al artículo o cosas que estén mal para rectificar&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3847613</id>
		<title>OpenMP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=OpenMP&amp;diff=3847613"/>
		<updated>2021-01-22T22:10:00Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: Página creada con «{{Definición |nombre=OpenMP |imagen=openmp.png |tamaño=200px |concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación }…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=OpenMP&lt;br /&gt;
|imagen=openmp.png&lt;br /&gt;
|tamaño=200px&lt;br /&gt;
|concepto=OpenMP es una API diseñada para explotar el paralelismo en diferentes lenguajes de programación&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;'''OpenMP''' es una interfaz de programación de aplicaciones (API por sus siglas en inglés) para la programación paralela en diferentes plataformas. Esta permite añadir procesamiento concurrente a programas codificados en [[C (lenguaje de programación)|C]], [[C++]] y [[Fortran]] sobre la base del modelo de ejecución fork/join. Esta API esta disponible en múltiples plataformas como Microsoft Windows o Linux. Consiste en un conjunto directivas de compilador, rutinas de biblioteca y variables de entorno que permiten al programador controlar el comportamiento de un programa en tiempo de ejecución. &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Su diseño, implementación y soporte está dirigido por un conjunto de fabricantes de software y hardware, siendo portable y escalable es una buena alternativa para la programación paralela en plataformas que varían desde una computador de escritorio (PC) hasta las supercomputadoras. Un sistema híbrido como los clústers de computadoras puede programarse usando OpenMP y MPI(Interfaz de Paso de Mensaje) ya que esta arquitectura posee memoria compartida y distribuida, o también se podría usar una extensión de OpenMP para la programación sobre memoria distribuida.&amp;lt;ref&amp;gt;CHANDRA, Rohit, et al. Parallel programming in OpenMP. Morgan kaufmann, 2001.&amp;lt;/ref&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
== Modelo de ejecución ==&lt;br /&gt;
&amp;lt;br&amp;gt;Se entiende como modelo de ejecución fork/join una técnica heredada de sistemas Unix en la que un proceso se divide en '''k''' hilos menores (fork), luego cada uno de estos hilos arroja ciertos &amp;quot;resultados&amp;quot; los cuales son unificados en uno sólo (join). &amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Cuando se incluye una directiva de compilador &amp;lt;code&amp;gt;#openmp&amp;lt;/code&amp;gt; esto implica que en el bloque de código se aplicarán una serie de mecanismos de sincronización. Esto quiere decir que automáticamente el código sera marcado como paralelo y, en dependencia de la configuración de la directiva, se lanzarán una serie de hilos y al final habrá una barrera en la que un hilo debe esperar a que el resto termine para continuar la ejecución (a no ser que se específique con la directiva '''nowait''', en cuyo caso los hilos continuarán)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Ahora bien, el modelo además incluye mecanismos de paralelismo de &amp;quot;tareas&amp;quot;. Recordemos que ningún proceso puede ejecutarse si todas sus dependencias no estan satisfechas por lo que en estos casos OpenMP implementa un mecanismo en el que los procesos no se ejecutan hasta que estos estén disponibles. A este estilo de paralelismo se le llama '''asíncrono''' ya que no es estrictamente necesario que se implementen barreras en la que los hilos tengan que esperar hasta que el resto termine la ejecución del bloque de código. Si se usan procesos con dependencias se implementa un grafo de dependencia en el que se puede definir el orden de ejecución de los procesos que poseen esta necesidad.&amp;lt;/br&amp;gt;&lt;br /&gt;
== Sintáxis básica ==&lt;br /&gt;
La sintáxis básica de una directiva de OpenMP para [[C (lenguaje de programación)|C]] y [[C++]] es la siguiente:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
# pragma omp &amp;lt;directiva&amp;gt; [cláusula [ , ...] ...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
para [[Fortran]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;fortran&amp;quot;&amp;gt;&lt;br /&gt;
!$OMP  PARALLEL &amp;lt;directiva&amp;gt; [cláusulas]&lt;br /&gt;
    [ bloque de código ]&lt;br /&gt;
!$OMP END &amp;lt;directiva&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se verán algunas de las directivas que pueden ser usadas en OpenMP&lt;br /&gt;
&amp;lt;ref&amp;gt;[https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-1.pdf &amp;quot;OpenMP 5.1 Specifications&amp;quot;]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Directivas==&lt;br /&gt;
* &amp;lt;code&amp;gt;parallel&amp;lt;/code&amp;gt;: Esta directiva indica que el código en cuestión puede ser ejecutado por varios hilos. Cada uno de los hilos se dividen en tareas implícitas que le son asignadas. Este es un ejemplo sencillo de un código de bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; ejecutado con esta directiva&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#pragma omp parallel for&lt;br /&gt;
    for (i=1; i&amp;lt;n; i++)&lt;br /&gt;
        b[i] = (a[i] + a[i-1]) / 2.0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;: Esta directiva indica que el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; subsiguiente ejecuta una o más partes de iteracciones divididas entre los hilos. Un hilo ejecuta una parte de las iteraciones del bucle (convirtiéndose en una tarea interna explícita) y la cantidad de hilos en los que se divide la ejecución es determinado por la configuración de esta directiva.&lt;br /&gt;
* &amp;lt;code&amp;gt;section&amp;lt;/code&amp;gt; y '''sections''': Esta directiva indica que varias secciones de código pueden ejecutarse en paralelo pero por un único hilo.&lt;br /&gt;
* &amp;lt;code&amp;gt;single&amp;lt;/code&amp;gt;:Esta directiva indica que el bloque de código solo puede ejecutarse por un único hilo que no tiene porque ser el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;: Esta directiva define que el código solo puede ser ejecutado por el hilo maestro.&lt;br /&gt;
* &amp;lt;code&amp;gt;critical&amp;lt;/code&amp;gt;:Interesante directiva que define que el bloque de código subsiguiente es una zona crítica y que por consiguiente solo puede estarla ejecutando un solo hilo y los otros que así lo deseen deben esperar hasta que se cumplan las condiciones de carrera.&lt;br /&gt;
&lt;br /&gt;
A continuación veremos algunas claúsulas usadas en la declaración de la directiva.&lt;br /&gt;
&lt;br /&gt;
== Claúsulas ==&lt;br /&gt;
* &amp;lt;code&amp;gt;shared(variable1,...,variablen)&amp;lt;/code&amp;gt;: Define que las variables o datos pueden ser visibles y accesibles por todos los hilos en ejecución. Por defecto todas las variables que se encuentran en la región paralela son compartidas excepto el contador de las iteraciones.&lt;br /&gt;
* &amp;lt;code&amp;gt;private(variable1,...,variablen)&amp;lt;/code&amp;gt;: Las variables o datos declarados en la claúsula son almacenados en el espacio local del hilo (comúnmente en la pila), lo que quiere decir que el hilo los úsara como variable temporal y por tanto solo él tendrá acceso al mismo. &lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
{{Listaref}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Informática]][[Category:Programación]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Openmp.png&amp;diff=3847612</id>
		<title>Archivo:Openmp.png</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Openmp.png&amp;diff=3847612"/>
		<updated>2021-01-22T22:05:23Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Información de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Licencia ==&lt;br /&gt;
{{CC}}&lt;br /&gt;
== Fuente: ==&lt;br /&gt;
Logotipo de OpenMP&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Usuario:Kenrios&amp;diff=3705131</id>
		<title>Usuario:Kenrios</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Usuario:Kenrios&amp;diff=3705131"/>
		<updated>2020-06-18T12:39:47Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: Página creada con «{{Ficha_Usuario_(avanzada) |imagen= |apellidos=Ruiz Madruga |nombre=Alejandro |nivel=Medio Superior |título=Tec. M Informática |postgrado= |temas=Informática |instituci…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha_Usuario_(avanzada)&lt;br /&gt;
|imagen=&lt;br /&gt;
|apellidos=Ruiz Madruga&lt;br /&gt;
|nombre=Alejandro&lt;br /&gt;
|nivel=Medio Superior&lt;br /&gt;
|título=Tec. M Informática&lt;br /&gt;
|postgrado=&lt;br /&gt;
|temas=Informática&lt;br /&gt;
|institución=Joven Club de Computación y Electrónica&lt;br /&gt;
|municipio=Cerro&lt;br /&gt;
|provincia=La Habana&lt;br /&gt;
|país=Cuba&lt;br /&gt;
|seguimiento=&lt;br /&gt;
|colaboradores=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685530</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685530"/>
		<updated>2020-05-14T12:46:29Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: /* Taxonomía de Flynn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=350px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
==Clasificaciones==&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de [[fragmentación interna]]. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la [[arquitectura de Von-Neumann.]]&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
&lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'' Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con [[memoria distribuida]] y [[memoria compartida]] o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685529</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685529"/>
		<updated>2020-05-14T12:45:36Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=350px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
==Taxonomía de Flynn==&lt;br /&gt;
La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
==Clasificaciones==&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de [[fragmentación interna]]. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la [[arquitectura de Von-Neumann.]]&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
&lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'' Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con [[memoria distribuida]] y [[memoria compartida]] o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685528</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685528"/>
		<updated>2020-05-14T12:43:35Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: /* Clasificaciones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=350px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
==Taxonomía de Flynn==&lt;br /&gt;
La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
==Clasificaciones==&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de [[fragmentación interna]]. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la [[arquitectura de Von-Neumann.]]&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
&lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'': Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con [[memoria distribuida]] y [[memoria compartida]] o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685428</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685428"/>
		<updated>2020-05-13T22:31:56Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: /* Clasificaciones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=350px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
==Taxonomía de Flynn==&lt;br /&gt;
La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
==Clasificaciones==&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de [[fragmentación interna]]. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la [[arquitectura de Von-Neumann.]]&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'': Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con [[memoria distribuida]] y [[memoria compartida]] o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685427</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685427"/>
		<updated>2020-05-13T22:26:33Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=350px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
==Taxonomía de Flynn==&lt;br /&gt;
La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
==Clasificaciones==&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de fragmentación interna. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la arquitectura de Von-Neumann.&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'': Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con memoria distribuida y compartida o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685426</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685426"/>
		<updated>2020-05-13T22:25:44Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=350px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
==Taxonomía de Flynn==&lt;br /&gt;
La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
===Clasificaciones===&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de fragmentación interna. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la arquitectura de Von-Neumann.&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'': Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con memoria distribuida y compartida o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685425</id>
		<title>Taxonomía de Flynn</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Taxonom%C3%ADa_de_Flynn&amp;diff=3685425"/>
		<updated>2020-05-13T22:25:04Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: Página creada con «{{Definición |nombre=Taxonomía de Flynn |imagen=Seminario2-16-728.jpg |tamaño=400px |concepto=La taxonomía de Flynn es una clasificación para las computadoras con arqu…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Definición&lt;br /&gt;
|nombre=Taxonomía de Flynn&lt;br /&gt;
|imagen=Seminario2-16-728.jpg&lt;br /&gt;
|tamaño=400px&lt;br /&gt;
|concepto=La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, basada en el número de instrucciones concurrentes en un instante de procesamiento.&lt;br /&gt;
}}&lt;br /&gt;
==Taxonomía de Flynn==&lt;br /&gt;
La taxonomía de Flynn es una clasificación para las computadoras con arquitectura paralela, propuesta por el profesor emérito de la Universidad de Stanford Michael J. Flynn, la cual clasifica a las mismas atendiendo a la cantidad de instrucciones y flujo de datos concurrentes en un instante de procesamiento.&lt;br /&gt;
&lt;br /&gt;
===Clasificaciones===&lt;br /&gt;
Esta taxonomía enuncia 4 clasificaciones las cuales son:&amp;lt;ref&amp;gt;DUNCAN, Ralph. A survey of parallel computer architectures. Computer, 1990, vol. 23, no 2, p. 5-16.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''SISD:'''''(Single Instruction Single Data)'' Esta clasificación se refiere a las computadoras tradicionales y secuenciales en las cuales una instrución a la vez se ejecuta sobre un único dato cada ciclo de reloj. Los datos en cuestión se almacenan en una única memoria en la cual se usan técnicas como la segmentación para evitar errores de fragmentación interna. Un ejemplo sencillo de estas computadoras son los antiguos mainframe basados en la arquitectura de Von-Neumann.&lt;br /&gt;
&lt;br /&gt;
'''MISD:'''''(Multiple Instruction Single Data)'' Arquitectura que se refiere a múltiples instrucciones ejecutándose sobre un único dato. Comúnmente se considera esta arquitectura poco práctica ya que en tiempo de ejecución la efectividad del paralelismo requiere un múltiple flujo de datos y, además, el acceso concurrente a un mismo dato en memoria puede ocasionar que un CPU tenga que esperar a que el recurso(dato) esté disponible para poder acceder a él. &lt;br /&gt;
'''SIMD:'''''(Single Instruction Multiple Data)'': Esta arquitectura representa la ejecución de una misma instrucción sobre un conjunto de datos. La misma es comúnmente vista en ciclos de programación que ejecutan una misma instrucción una y otra vez sobre datos de un arreglo o conjunto de datos. En la arquitectura SIMD estos datos son procesados por múltiples CPU que ejecutan la misma instrucción sobre una parte del conjunto o arreglo, cada uno, hasta llegar a procesar la totalidad de los mismos. &lt;br /&gt;
&lt;br /&gt;
'''MIMD:'''''(Multiple Instruction Multiple Data)'' Esta arquitectura representa a un conjunto de instrucciones que se ejecutan sobre un conjunto múltiple de datos. La misma es muy usada hoy en día para explotar el paralelismo ya sea con memoria distribuida y compartida o híbridos como los clústers de computadoras. Muchos multiprocesadores modernos(como los de la tecnología Core i de Intel) entran en esta clasificación.&amp;lt;ref&amp;gt;JOHNSON, Eric E. Completing an MIMD multiprocessor taxonomy. ACM SIGARCH Computer Architecture News, 1988, vol. 16, no 3, p. 44-47.&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Fuentes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Informática]]&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Seminario2-16-728.jpg&amp;diff=3685424</id>
		<title>Archivo:Seminario2-16-728.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Seminario2-16-728.jpg&amp;diff=3685424"/>
		<updated>2020-05-13T22:21:27Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: Taxonomía de Flynn&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Resumen ==&lt;br /&gt;
Taxonomía de Flynn&lt;br /&gt;
== Información de copyright: ==&lt;br /&gt;
&lt;br /&gt;
== Fuente: ==&lt;br /&gt;
https://image.slidesharecdn.com/seminario2-120213053354-phpapp01/95/seminario2-16-728.jpg?cb=1329111956&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Archivo:Michael_J._Flynn.jpg&amp;diff=3639147</id>
		<title>Archivo:Michael J. Flynn.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Archivo:Michael_J._Flynn.jpg&amp;diff=3639147"/>
		<updated>2020-02-20T15:34:12Z</updated>

		<summary type="html">&lt;p&gt;Kenrios: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Michael J. Flynn es un profesor emérito de la Universidad Stanford estadounidense&lt;/div&gt;</summary>
		<author><name>Kenrios</name></author>
		
	</entry>
</feed>