2012-01-03 2 views
7

편집 : 당신이 이것을 재현 할 수 있는지 여부를 확인하는 것이 유용 할 것입니다. 이 작업을 수행하려면 하나의 컴퓨터 만 있으면됩니다 (원격 연결이 필요 없음).Kernel-FrontEnd 통신의 이해 - 프런트 엔드가 고정 된 이유는 무엇입니까?

업데이트 다른 사람이 Mac이나 Win7에서이를 재현 할 수 없으므로 WinXP 또는 특정 컴퓨터에만 적용됩니다. 이 시점에서 나는 포기합니다.


프런트 엔드와 커널이 통신하는 방법에 대한 자습서가 있으면 원격 커널 문제를 디버그 할 수 있습니다. 그러한 일반적인 대답 (또는 다른 곳에서 자습서로 연결되는 링크)을 환영합니다. 나는 이미 Sascha Kratky의 Remote Kernel Strategies에 대해 알고 있습니다.

실용적인 질문 : 어떤 방식 으로든 원격 컴퓨터에 연결하면 (예 : 원격 커널 전략 사용) 프런트 엔드가 조만간 중단됩니다. 이 문제를 어떻게 방지 할 수 있습니까?

선택 -

  1. 새로운 커널 구성을 만듭니다 (> 커널 구성 옵션 ... 평가 메뉴) :

    다음은 단일 시스템에 문제 (필요 없음 원격 연결)을 재현하는 방법 고급 옵션. MLOpen에

    인수 : 커널을 실행하는

    -LinkName "[email protected],[email protected]" -LinkMode Listen 
    -LinkProtocol TCPIP -LinkHost "YOUR-IP-HERE" -LinkOptions MLDontInteract 
    

    (.. 명령 창에서 ipconfig을 입력하여이를 얻을 수 있습니다 Windows에서 컴퓨터의 IP 주소 YOUR-IP-HERE 교체)

    쉘 명령을 떠날 빈 (우리는 수동으로 할 것입니다)

  2. 새 노트북을 열고, 노트북의 커널을 방금 설정 한 것으로 설정하고, 뭔가 (1+1)를 평가하십시오.

  3. 이제 연결 시간이 초과되기 전에 수동으로 커널을 시작해야합니다. 그래서 커맨드 라인 모드에서 새 커널 (math)를 시작하고 다음을 평가 :

    link=LinkConnect["8000,8001",LinkProtocol->"TCPIP"] (* connect to front end link *) 
    
    $ParentLink = link; (* set the front end link as parent link *) 
    

    이제 연결이, 모든 것이 제대로 (작동 프론트 엔드의 분홍색 메시지 창에서 하나의 메시지를 저장 나타납니다)

  4. Manipulate[n, {n, 0, 100, 1}]을 평가하십시오. 첫째, 이것은 효과가있는 것처럼 보입니다. 이제 슬라이더를 가지고 노십시오. 조만간 프런트 엔드가 멈추어 죽을 필요가 있습니다. 나를 위해, 슬라이더를 10 초 동안 위아래로 드래그하면 항상 해제하지 않고도 충분합니다.

왜 프런트 엔드가 고정되어 있습니까? 프런트 엔드와 커널간에 TCPIP 모드 연결을 생성하여 모든 것이 올바르게 작동하는 방법은 무엇입니까?


일부 노트 : 나는 윈도우 XP에있어

  • .
  • LinkProtocol -> "SharedMemory"을 사용하면 문제가 발생하지 않습니다.
  • 평가 -> 평가 중단을 사용하여 계산을 중단하면 올바르게 작동합니다.
  • 나는 Links[]을 사용하여 MathLink`$PreemptiveLinkMathLink`$ServiceLink이 생성되었고 LinkConnectedQ[]True을 반환하는 것으로 확인되었습니다.

다시 프런트 엔드는 Manipualate 슬라이더를 몇 초 동안 계속 드래그 한 후에 만 ​​고정됩니다.

Link to same question on MathGroup.

관련 : Firewall settings for remote kernel to work (Mathematica)

+0

클로저에게 : 이것은 유효한 프로그래밍 질문입니다. 커널에서부터의 연결은 프로그래밍 방식으로 (프런트 엔드, 다른 커널 또는 다른 소프트웨어로) 설정할 수 있습니다. 문제는 Mathematica의 통신 프로토콜을 이해하고 사용하는 것입니다. – Szabolcs

+0

그래픽 메시지를 드래그 할 때 윈도우 메시지 루프가 일반적으로 마우스를 올릴 때까지 수정되어 요소 나 창을 드래그하여 부드럽게 처리합니다. 가능하면 이로 인해 컴퓨터 간의 동기화 메시지가 중단되어 시간 제한 조건이 발생합니다. – Motes

+0

나는 Windows 7에서 이것을 시도했지만, 프론트 엔드와 커널이 여러 링크 ($ ParentLink 외)를 유지하고 있기 때문에이 메소드가 실패 할 것으로 예상했기 때문에 놀랍습니다. 서비스 링크와 선매 링크. 선제 연결이 올바르게 설정되지 않으면 Dynamic이 실패 할 것이라고 믿습니다. –

답변

2

참고로,하는 방법을 프론트 엔드 회담에 대한 정보에 조금이있다 (안 대답하지만, 하드 주석으로이 쓰기) 여기 커널은 http://reference.wolfram.com/mathematica/tutorial/AdvancedDynamicFunctionality.html

약 절반 아래로, 그것은 말합니다

The front end and kernel communicate with each other through several 
MathLink connections, known as the main link, the preemptive link, 
and the service link. The main and preemptive links are pathways by 
which the front end can send evaluation requests to the kernel, and 
the kernel can respond with results. The service link works in reverse, 
with the kernel sending requests to the front end. 

이상. 도움이 될지도 모른다. 또한, 동일한 정보는 31 페이지의 PDF 파일에 : 커널과 프론트 엔드 사이

http://www.wolfram.com/learningcenter/tutorialcollection/DynamicInteractivity/

실제 메시징 프로토콜은 매우 고급이어야합니다.

관련 문제