2013-08-26 5 views
2

ILNumerics를 채택하여 내 컴퓨터 학습 패키지를 코딩하기 시작했습니다.ILNumerics 권장 최적화 패키지

확실히 Neural Nets, SVM, 커널 메소드에 들어가서 더 베이지안 프레임 워크로 이동하기 시작합니다.

나는 ILNumerics 이미 일부 '기계 학습 도구 상자'를 제공하는 것을 알고,하지만 난 내 공헌과 코드 내 자신의 알고리즘을 추가하고자하는 일부 기능이 존재하지 않습니다도 있기 때문에 (아직?)

첫째, 내가 잘 이해한다면 현재로서는 최적화 패키지가 포함되어 있지 않습니다. 나는 틀렸다고 희망한다. 그렇지 않은 경우 ILNumerics를 통해 구현하는 방법에 대한 제안은 매우 높이 평가 될 것입니다. 이를 위해 단순히 기존 코드를 혼합하면 성능에 영향을 미칩니 까? ILArray와 다른 벡터/행렬을 혼합하는 것이 바람직합니까? 퀵 가이드에 제시된 권장 사항을 준수하면 탁월한 성능을 발휘할 수 있습니다.

ILNumerics와 함께 사용할 수있는 사전 제작 된 최적화 패키지/라이브러리를 권장합니다.

감사 힌트/조언을 많이, 평소와 같이 권고,

GL

답변

2

당신은 바로 모든 지점에 있습니다. 현재 ILNumerics에서 사용할 수있는 최적화 패키지가 없습니다. 그러나 아시다시피, .NET의 한 가지 큰 이점은 외부 패키지를 쉽게 통합 할 수 있다는 것입니다. 몇 가지 옵션이 여기에 존재 :

의 PInvoke (기본 모듈)

을 대부분의 기존 최적화 패키지는 네이티브 모듈이 존재하기 때문에, PInvoke를 사용하면 친구입니다. 자동 DLLImport 서명 생성을위한 몇 가지 도구가 있습니다. 개인적으로, 나는 그 서명을 만드는 것을 선호한다 manually. 특히 대부분의 과학 패키지가 .NET에 쉽게 통합되는 간단한 서명을 노출하기 때문에. 그러나 네이티브에서 관리되는 코드로의 콜백 및 복잡한 구조체의 마샬링에 문제가 발생할 수 있습니다. (SO 우리는이 게시물 (Free Optimization Library in C#를 참조하십시오. 당신은 기존의 .NET 최적화 모듈을 찾을 수 있습니다

.NET 모듈

... 당신이 그들 모두를 해결하는 데 도움) 또는 Microsoft 찾기 재단을 다할 것입니다. 더 나은 모듈 수도 이미 존재하는 경우 - 잠시 동안 찾지 않았습니다. 구현이 매우 조심스럽게 수행되지 않는 한 성능이 좋지 않거나 (없음) 메모리 관리로 인해 성능에 어려움을 겪지 않을 수도 있습니다. (아는 한, 다른 프로젝트는 메모리를 추적하지 않습니다. ILNumerics와 동일한 효율적인 방법이 있습니까?) 그러나 이러한 라이브러리를 쉽게 인터페이스 할 수 있습니다 : DLLImport 서명이 필요하지 않습니다.하지만 ILNumerics 메모리 관리에서 이익을 얻으려면 ILNumerics 측에서 배열 메모리를 관리해야합니다 그래서, 어떤 System.Array에게 어떤 패턴을주기위한 패턴 다른 .NET 함수는 다음과 같습니다.

.... inside ILNumerics function 
using (ILScope.Enter(inparameter1,inparameter2)) { 
    .... 
    ILArray<double> A = zeros(1000,1000); // allocate memory for external use 
    var aArray = A.GetArrayForWrite();  // fetch reference to underlying System.Array 
    callOtherLib(aArray);     // let other lib use and fill the array 
    // proceed normally with A... 
    return A + 1 * 2 ... ; 
} 

다른 라이브러리가 지정된 배열에서만 읽는 경우 A.GetArrayForRead()가 더 나은 성능을 제공 할 수 있습니다. 이 스키마를 사용하면 최소한 구현의 ILNumerics 측면에서 가장 효율적인 메모리 사용이 보장됩니다.

양쪽에서 데이터 구조를 섞어도 아무런 해가되지 않지만 일반적으로 많은 장점이 없습니다. 혼합 된 행렬 구현에 결합 된 연산자가 없기 때문에 편리한 구문을 사용하지 않는 경우가 종종 있습니다. 또한 매트릭스 액세스를 요소 단위 연산으로 나누어 잠재적으로 성능이 떨어지는 솔루션으로 이끌 수 있습니다.따라서 명확하게 분리 된 API가있는 모듈 식 디자인을 권장합니다.

위의 메모리 구성표는 기본 라이브러리와의 인터페이스에도 적용 할 수 있습니다. 단지

또 다른 방법

사용 ILNumerics는 - 물론 - 기능 및 배열 기능이 내장 ILNumerics를 사용하여, 자신에 대한 몇 가지 모듈을 재 구현하는 것입니다. 공식 IL_Numerics 배포본에 패키지가 통합되기 위해서는이 방법이 필수적입니다. 편리한 ILNumerics 구문을 활용할 수 있고 효율적인 ILNumerics 메모리 관리에서 자동으로 이익을 얻을 수 있으며 코드는 결국 완전히 독립적 인 플랫폼이 될 것입니다. 또한 알고리즘에 필요한 기능과 관련하여 가장 많은 유연성을 제공합니다.

+0

감사합니다. 내 자신의 최적화 도구를 코딩하는 어려운 길을 가고 있다고 생각합니다. 그러므로 나는 또 다른 질문을 가지고 있다고 생각합니다. 병렬 처리, 즉 병렬 클래스를 ILArrays와 함께 사용할 수 있습니까? 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 그것들을 어떤 데이터 구조로 취급해야합니까? 미리 감사드립니다. –

+0

ILNumerics의 모든 내장 함수가 자동으로 내부적으로 병렬 처리됩니다. 그러나 ILArray는 스레드 세이프가 아닙니다. 멀티 쓰레딩 시나리오에서 ILArray를 다룰 때는 공통 동기화 옵션을 사용해야합니다. 더 궁금한 점이 있으면 새로운 질문을하십시오. –