메시지 전달 인터페이스(Message Passing Interface, MPI)는 분산 및 병렬 처리에서 정보의 교환에 대해 기술하는 표준이다. 병렬 처리에서 정보를 교환할때 필요한 기본적인 기능들과 문법, 그리고 프로그래밍 API 에 대해 기술하고 있지만 구체적인 프로토콜이나 각각의 구현에 대한 것에 대해서는 기술하지 않는, 하나의 거시적인 테두리를 정해주는 표준으로 이해 할 수 있다.

실제적인 MPI 애플리케이션은 서로 정보를 주고받는 여러개의 프로세스들로 이루어져 있는데, 이 각각의 프로세스들은 MPI 애플리케이션이 구동될때에 모두 병렬적으로 시작된다. 이 각각의 프로세스들은 모두 하나의 문제를 풀기위해 한 프로세스에서 다른 프로세스로 데이터와 정보들을 필요에 따라 서로 주고 받게된다. 이러한 원리의 장점은 하드웨어적으로 분산되어있는 컴퓨터들 간에도 이런 데이터와 정보들을 주고 받을 수 있다는 점이다. 그래서 특별히 병렬처리를 위해 만들어진 병렬 컴퓨터(공유 메모리를 지녔다거나, Infiniband 혹은 Myrinet 등을 통해 고속으로 정보를 주고받는 것이 가능하게 만들어진) 뿐만 아니라, (TCP를 통해 정보들이 교환되는) PC 들로 이루어진 PC 클러스터(PC-Cluster) 에서도 이런 병렬 MPI 프로그램들은 잘 돌아간다.

[편집]함께 보기





Message Passing Interface (메시지 전달 인터페이스, MPI )는 병렬 컴퓨팅 이용하기위한 표준화 된 규격이다. 구현 자체를 가리 키기도한다.

여러 CPU가 정보를 바이트로 구성된 메시지로 전송하여 함께 작동 할 수 있도록한다. 자유롭게 사용할 수있는 구현은MPICH 가 유명하다. 그 밖에도 상용 벤더 등에 의한 독자적인 구현이 존재한다.

라이브러리 수준에서 병렬이기 때문에 언어를 불문하고 사용할 수 프로그래머가 세밀한 튜닝을 할 수 있다는 장점이있는 반면, 작동은 명시 적으로 절차를 설명해야 잠금 처리 등도 프로그래머 측이 큰 책임을 가져야한다.

업계 단체 나 연구자들의 멤버로 구성된 MPI Forum에 의해 표준이 명확하게 정의되어 있기 때문에 어떤 환경에서 만든 프로그램이 다른 환경에서도 동작 할 것으로 기대된다.

구현 편집 ]

외부 링크 편집 ]




'Computer Science > Parallel Computing' 카테고리의 다른 글

CUDA(Compute Unified Device Architecture)  (0) 2013.03.25
OpenMP  (0) 2013.03.25
CUDA - Host Memory와 Device Memory의 사이의 데이터 전송  (0) 2013.03.25
병렬 컴퓨팅  (0) 2012.11.03
Posted by linuxism
,



TestWebViewActivity.java 파일 입니다.

WebView는 android 2.2버젼 이후 부터 지원 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package arabiannight.tistroy.com;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 
public class TestWebViewActivity extends Activity{
     
    private WebView mWebView;
     
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        setLayout();
         
        // 웹뷰에서 자바스크립트실행가능
        mWebView.getSettings().setJavaScriptEnabled(true);
        // 구글홈페이지 지정
        mWebView.loadUrl("http://www.google.com");
        // WebViewClient 지정
        mWebView.setWebViewClient(new WebViewClientClass()); 
         
    }
     
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
     
    private class WebViewClientClass extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
     
    /*
     * Layout
     */
    private void setLayout(){
        mWebView = (WebView) findViewById(R.id.webview);
    }
}


main.xml 파일 입니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
 
</LinearLayout>


AndroidManifest.xml 파일 입니다.
< 인터넷을 사용하기 위해서 퍼미션은 꼭 선언 해줘야 합니다. >

1
<uses-permission android:name="android.permission.INTERNET"/>



만약 화면 전체를 Webview처럼 특정 url만 보여줄때는 Webview 대신 Intent.ACTION_VIEW 를 통해 간단하게 보여 줄 수 있습니다.

1
2
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com"));
startActivity(intent);




TestWebView.zip






출처 - http://arabiannight.tistory.com/54


코드에서 

if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
            mWebView.goBack(); 
            return true; 
        } 
        return super.onKeyDown(keyCode, event); 

이부분은 뒤로가기 키를 눌렀을 때, 이전 페이지가 존재하면 전페이지로 돌아가게 해줍니다.

그리고, 

private class WebViewClientClass extends WebViewClient 에서

WebViewClientClass 클래스는 WebViewClient 클래스를 상속받아서 만들었는데, WebViewClient 는 WebView 에서 로딩한 웹페이지의 링크를 클릭했을 때, 해당 URL을 로딩하는 데 필요합니다.






안드로이드의 WebView는 WebKit/android포트를 
JNI 인터페이스를 통해 java형태로 제공하는 Widget 입니다.


1. html 파일로 네트워크에 접속하려면 permission이 필요합니다. 
   AndroidManifest.xml 파일에 
<uses-permission android:name="android.permission.INTERNET"/>  
   추가

 2. HTML에 <body onload="a();"> 와 같은 자바스크립트를 썼을 때 동작하지 않는 문제는 WebView가 기본적으로 Javascript 사용이 disable 되어 있기 때문입니다.
    wv.getSettings().setJavaScriptEnabled(true);

3. WebView를 load했을 때 오른쪽에 흰 줄(흰 배경)이 보이는 것은 scrollbar 영역이 잡혀있기 때문입니다.
이것을 사라지게 하려면 아래 한줄을 추가합니다.
   wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);


출처 - http://bunhere.tistory.com/249






WebChromeClient를 구현


WebView browser = (WebView)findViewById(/*WebView의 ID*/);
browser.getSettings().setJavaScriptEnabled(true);  //javascript 사용 가능하게 한다
final Context myApp = this;

browser.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)
    {
        new AlertDialog.Builder(myApp)
            .setTitle("AlertDialog")
            .setMessage(message)
            .setPositiveButton(android.R.string.ok,
                    new AlertDialog.OnClickListener()
                    {
                        public void onClick(DialogInterface dialog, int which)
                        {
                            result.confirm();
                        }
                    })
            .setCancelable(false)
            .create()
            .show();

        return true;
    };
});

browser.loadUrl(/*웹 페이지 주소*/);

출처 - http://www.androidpub.com/925308









'Android > Common' 카테고리의 다른 글

Why do variable names often start with the letter 'm'?  (0) 2013.01.19
Javascript에서 Android 함수 호출하기  (1) 2013.01.02
android - app 버전 관리  (0) 2012.10.07
service - Service API 변경  (0) 2012.09.28
android - SharedPreferences  (0) 2012.09.24
Posted by linuxism
,

java - @Override

Development/Java 2012. 11. 3. 11:23


jdk 5에서부터 추가된 또하나의 기능인 @Override를 소개하고자 한다.

머 이미 쓰는 사람들은 많이 있겠지만

이제사 1.4를 벗어나려고 버둥대는 터라...*^^*

(쓰고 싶어두 기존 소스와의 유지 및 개발환경에 써보질 못했다는 핑계거리....)

 

@Override란 위에서 말한바와 같이 jdk5에서부터 추가된 annotion의 하나이다.

말그대로 상위 클래스에서 오버라이드한 메소드라는 것을 지칭한다.

 

public class HelloServlet extends HttpServlet{

@Override

public void doGet(HttpServletRequest request,HttpServletResponse response)

    throws IOException,ServletException{

    -- to_DO --

}

}

 

위의 경우 HelloServlet은 HttpServlet에서 정의한 doGet()을 오버라이드 하고 있다.

물론 @Override를 사용하지 않아도 되지만

 

이 때 @Override 를 붙임으로써 doGet() 가 상위클래스에서 오버라이드된 메소드임을 지정함으로써

개발자가 메소드명이나 파라미터를 잘못 쓰고 찾지 못하는 것을 방지해준다.

 

즉 @Override를 상위클래스에 정의되지 않은 메소드에 쓰는 경우 컴파일 에러를 발생하기 때문에

혹여나 발생할수 있는 문제의 소지를 예방할 수 있게 해주기 때문에

오버라이드한 메소드에 대하여 @Override라는  annotation을 써주는 것이 좋다.


출처 - http://civan.tistory.com/entry/Override-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0




메소드 오버라이드는 OOP 프로그래밍에서 매우자주 많이 사용되는 방법이다. 

간단히 도표를 그려봣다.

위의 그림과 같이 클래스 A, 클래스 B, 그리고 클래스 C의 3가지 클래스가 있다. 상위클래스인 A로두터 ClassC로 가면서 화살표 방향으로 상속을 받는데. 클래스B에서 상위클래스의 메소드 A랑 똑같은 이름으로 된 메소드를 만들면 클래스B의 메소드A는 클래스A의 메소드A가 아닌 클래스B에서 정의된 메소드 A가 되어버린다. 이렇케 새로운 메소드로 덮어씨워서 실행시키는것 이것을 오버라이드(override)라고 하는데 이러한 개념은 상당히 자주 사용되어지는 방법이니 꼭 외워두는 것이 좋을 것이다. 앞으로 아마도 나도 앱개발할때 뻔질나게 쓰겠지만 이글 보시는 분도 뻔질나게 쓰실꺼다.


출처 - http://blog.daum.net/3dweb/2999609

'Development > Java' 카테고리의 다른 글

java 로드맵  (0) 2012.11.07
java - enum  (0) 2012.11.05
java - 문자열, 숫자, 영문 배열 및 list 정렬(sort)  (0) 2012.11.02
java - 클래스 구조 및 헬퍼 클래스(helper class)  (0) 2012.10.30
java - File 클래스  (0) 2012.10.23
Posted by linuxism
,