Está en la página 1de 6

Programación Hibrida

López Espín Ivan | 03/05/2021


Índice
Introducción ............................................................................................................. 1
Metodología............................................................................................................. 1
Ventajas .................................................................................................................. 1
Ejemplo ................................................................................................................... 2
Java y lenguaje ensamblador .............................................................................. 2
Introducción
En la programación de software, sistemas híbridos inteligentes denotan a los
sistemas de software que emplean, en paralelo, una combinación de modelos de
inteligencia artificial, métodos y técnicas de estos subcampos.
Cada sistema inteligente natural es un hibrido porque estos desarrollan operaciones
mentales tanto como sub-simbólicos. Desde hace pocos años se ha ido
desarrollando una discusión sobre la importancia en la inteligencia artificial de la
integración de todos estos sistemas. Basados en las nociones de que se habían ya
creado simpes y específicos sistemas de inteligencia artificial (como sistemas para
le visión de computadores, síntesis del habla, etc.., o software que emplean alguno
de los modelos mencionados) algunos autores proponen que es ahora el momento
de la integración para crear complejos, grandes sistemas de inteligencia artificial.

Metodología
La programación hibrida es utilizada en los casos en donde el código en
ensamblador dificulta la estructuración del programa. La programación híbrida
proporciona un mecanismo por medio del cual podemos aprovechar las ventajas del
lenguaje ensamblador y los lenguajes de alto nivel, todo esto con el fin escribir
programas más rápidos y eficientes.
Al trabajar con un lenguaje de alto nivel, en ocasiones nos encontramos con elpro
blema de que necesitamos que haga determinada función o trabajo, pero
desafortunadamente ésta solo existe en otro lenguaje que no es el que necesitamos
utilizar, o simplemente, no encontramos esa función en ningún lenguaje de alto nivel

Ventajas
• Para mejorar la escalabilidad
• Cuando muchas tareas producen desbalanceo
• Aplicaciones que combinan paralelismo de grano grueso y fino
• Reducción del tiempo de desarrollo de código
• Cuando el número de procesos MPI es fijo
• En caso de mezcla de paralelismo funcional y de datos
En este momento el lenguaje ensamblador constituye una herramienta no solo
eficaz, sino simple para producir un parche para el compilador de nuestro lenguaje
preferido. Tal vez el mayor problema con el que nos enfrentemos sea el de cómo
conectar ambos programas (el de alto y el de bajo niveles) y cómo pasar variables
de un programa al otro. Para conseguir nuestro objetivo se utilizan pseudo-
operadores, es decir, instrucciones que aparecen en el código fuente del
ensamblador pero que no generan ninguna instrucción de máquina, pero
proporcionan directivas para que el ensamblador pueda operar con datos,
ramificaciones condicionales, generación de listados y con macros durante el
proceso de ensamble.

03 de mayo del 2021 1


Ejemplo
Java y lenguaje ensamblador
En este ejemplo realizaremos una calculadora simple que nos sume, reste y
multiplique dos números. Código: Parte 1
public class Operaciones {
public native int sumar(int a, int b);
public native int restar(int a, int b);
public native int multiplicar(iint a, int b);
static {
System.loadLibrary(“operacioneslmpl”);
}
Public static void main(String[] args){
int n1 = 2;
int n2 = 3;
Operaciones op = new Operaciones();
int resultado= op.sumar(n1,n2);
System.out.println(“El resultado de la suma es: ” + resultado);
int resultado = op.restar(n1,n2);
System.out.println(“El resultado de la resta es: ” + resultado);
int resultado = op.multipicar(n1,n2);
System.out.println(“El resultado de la multiplicación es: ” + resultado);
}
}
Parte 2
/* DO NOT EDIT THIS FILE -it is machine generated */
#include <jni.h>
/* Cabecera para la clase Operaciones */
#ifndef_include_Operaciones
#define_include_Opereaciones
#ifdef__cplusplus

03 de mayo del 2021 2


Extern “C”{
#endif
/*
*Clase Operaciones
*Método sumar
*Signature: (||)|
*/
JNIEXPORT jint JNICALL java_Operaciones_sumar
(JNIEnv*,jobject,jint,jint);
/*
*Clase Operaciones
*Método restar
*Signature: (||)|
*/
JNIEXPORT jint JNICALL java_Operaciones_restar
(JNIEnv*,jobject,jint,jint);
/*
*Clase Operaciones
*Método mulgtiplicar
*Signature: (||)|
*/
JNIEXPORT jint JNICALL java_Operaciones_multiplicar
(JNIEnv*,jobject,jint,jint);
#ifdef_cplusplus
}
#endif
#endif

Parte 3

03 de mayo del 2021 3


.386
.model flat,stdcall
.codeJava_Operaciones_sumar proc JNIEnv:DWORD, jobject:DWORD,
a:DWORD,b:DWORD
mov eax, a ;ponemos el valor de a en el registro eax
mov ebx,b ;ponemos el valor de b en el registro ebxadd eax,ebx y sumamos el
contenido delregistro eax con el deebx y el resultado se guarda en eax
ret ;por default se retorna el valor del registro eax
Java_Operaciones_sumar endp
Java_Operaciones_restar proc JNIEnv:DWORD, jobject:DWORD,
B:DWORD
mov eax, a
mov ebx, b
sub eax, ebx; Restamos el contenido de registro ebx al de abx
ret
Java_Operaciones_restar endp
Java_Operaciones_multiplicar proc JNIEnv:DWORD, jobject:DWORD,
a: DWOED,b:DWORD
mov eax, a
mov ebx, b
mule bx; Multiplicamos el contenido de registro ebx con el registro por default eax
ret
Java_Operaciones:multiplicar endp
END

03 de mayo del 2021 4

También podría gustarte