매트랩 코더 대 핸드 코딩?
나중에 이 문서를 읽는 사용자에 대한 배경 정보(잠기지 않은 경우)저는 문제를 먼저 이해하기 위해 고급 언어로 프로그래밍을 하는 편입니다.가능한 모든 코너 사례를 다룬 후 코드를 C++(또는 C)로 변환합니다.
제가 쓰는 대부분의 코드에는 수학이 포함되어 있기 때문에 MATLAB은 제가 사용하는 언어입니다(저를 위한 대안은 파이썬입니다).어쨌든, 저는 손으로 MATLAB에서 C++로 코드를 번역합니다.
MATLAB 코더를 사용할 때 장점/단점이 있는지 아는 사람이 있습니까?새 제품이고 가격이 매우 비싸지만 번역으로 절약하는 시간 외에 다른 혜택이 있습니까?
부인
이 글은 제가 한 특정 프로젝트에 대한 경험을 바탕으로 작성한 매우 설득력 있는 글입니다.저는 최신 버전의 코더를 사용한 적은 없지만, 이전 Real Time Workshop 제품의 일부로 포함된 매트랩 코드를 C++로 변환하는 동등한 제품(내장 코더)을 사용한 경험이 있습니다.이러한 의견은 여전히 적용되어야 합니다.마일리지는 변동될 수 있습니다.
초기 혜택...
제 상황에서, 임베디드 코더는 더 큰 오디오 애플리케이션의 일부에 맞는 처리 블록을 만드는 데 사용되었습니다.처리 블록은 실시간으로 일정한 샘플 버퍼 스트림을 처리하는 작업을 수행했습니다.저는 matlab에서 원래 알고리즘을 만들었고, 변환 도구는 초기 프로토타입을 네이티브 코드로 컴파일하여 실시간 응용 프로그램에 사용할 수 있는 것으로 변환하는 것을 꽤 쉽게 만들었습니다.변환된 코드가 변환 과정에서 인간의 실수(Mahworks 엔지니어의 초인적 능력을 가정)의 가능성 없이 원래 코드와 수치적으로 동일하게 기능하고 있다고 가정하는 것도 좋았습니다.
이러한 초기 프로토타이핑 단계 이후에 혜택이 종료되었습니다.
문제 1: 인터페이스 연결 시간 낭비
알고리즘이 복잡해짐에 따라 변환 후 C++ 프레임워크와 인터페이스하기 쉽도록 matlab 인터페이스를 함수에 코딩하는 방법에 대해 점점 더 고민하기 시작했습니다(내부 상태를 실시간으로 모니터링하고 싶었습니다).이것은 결국 실제 알고리즘 개발 자체만큼의 시간을 사용하기 시작했고, 따라서 그러한 도구를 사용하는 목적을 물리쳤습니다.저는 알고리즘을 더 작은 덩어리로 분해한 다음 C++을 사용하여 접착제로 붙일 수 있었지만, 그러면 완전한 알고리즘에 대한 직접적인 Matlab만의 비교를 할 수 있는 능력을 잃게 될 것입니다.
문제 2: 일부 기능이 완전히 지원되는 것은 아닙니다.
코더는 Matlab 언어의 하위 집합을 지원합니다.경우에 따라 지원되는 기능이 어떤 방식으로든 제한됩니다.예를 들어, 제가 작업하던 애플리케이션에서 필터의 특성을 실시간으로 수정할 수 있기를 원했습니다.코드 생성 도구가 변수 인수로 필터 프로토타이핑 함수에 대한 호출을 허용하지 않기 때문에 표준 Matlab 필터 프로토타이핑 함수를 사용할 수 없었습니다.저는 신호 처리 도구 상자 라이센스가 있음에도 불구하고 DSP 책을 통해 저만의 구현을 개발하는 데 시간을 보냈습니다.
문제 3: 자동으로 생성된 코드가 비효율적이었습니다.
저는 인터페이스 문제로 좌절하고 C++로 알고리즘을 손으로 코딩했습니다.제 애플리케이션의 경우 변환된 코드에 비해 손으로 작성된 코드가 75% 성능 향상되었습니다.사용하는 변환 도구의 버전과 프로파일러에 대한 선호도 등 응용 프로그램에 따라 성능 차이가 매우 큽니다.변환 도구 자체는 배워야 할 설정이 많은 복잡한 제품입니다.성능을 향상시키기 위해 설정과 매트랩 코드를 조정하는 방법을 연구하는 것은 손으로 코딩하는 데 더 많은 시간을 소비할 수 있습니다.
변환 도구를 사용한 적이 없습니다...
저는 이제 좀 더 테스트 지원 방식을 선호합니다.저는 Matlab에서 프로토타입을 코딩하고 제가 원하는 대로 동작할 때까지 조정합니다.그런 다음 저는 C++로 생각하고 그 언어에 더 자연스러운 방식으로 알고리즘을 기록합니다.그런 다음 C++ 코드와 인터페이스하는 멕스 파일을 만들어 신뢰할 수 있는 matlab과 비교하여 테스트할 수 있습니다.제가 일하는 문제 공간의 경우, 이것이 일을 처리하는 데 훨씬 더 효율적인 (인간 및 기계) 방법입니다.
결론적으로, 이것은 단지 한 사용자의 의견입니다.아마도 (원래 게시물의 댓글에서 제안된 것처럼) 어떻게 지내는지 보려면 평가판에 등록해야 할 것입니다.하지만 당신이 약간 C++ 닌자라면, mex 파일을 빌드하여 테스트하는 것은 애드온 제품에 대한 비싼 라이센스를 필요로 하지 않으며 그것은 당신을 더 나은 개발자로 만들 것입니다.
MATLAB에 쓰는 것이 더 쉽다면, 그 가치는 시간을 얼마나 소중히 여기느냐에 따라 크게 달라질 것입니다.
MATLAB과 C 또는 C++의 성능을 비교하는 것은 매우 복잡합니다.대부분의 경우 C 또는 C++이 더 빠르지만 일부 선형 대수 애플리케이션에서는 MATLAB이 가장 빠르게 실행될 수 있습니다.저는 MATLAB에 있는 것보다 더 느리게 실행되는 FORTRAN 애플리케이션이 있다고 주장한 한 교수를 기억합니다.이에 대한 많은 사례 연구가 있습니다. 구글에서 나타나는 속도를 비교하는 다양한 연구를 살펴보고 결정을 내리기 위해 무엇을 하고 있는지 비교하는 것이 좋습니다.
모든 것이 과정에 관한 것입니다.
제가 일하는 곳에서는 Simulink 모델과 그 종속성에 대한 우수한 관리 체계를 개발했습니다.그런 다음 저는 자동 코딩 단계를 진행하기 위한 스크립트를 개발했고 동료는 IDE에서 프로젝트 파일을 개발했습니다. 그러면 스크립트를 실행하면 모든 소스 파일이 적절한 폴더 구조로 디스패치되고 프로젝트가 IDE에서 쉽게 컴파일될 수 있습니다. 여기서 다른 사람도 자동 코딩 소프트웨어를 인터페이스하기 위해 래퍼 코드를 배포했습니다.
IMHO는 가능한 한 빨리 프로세스를 최대한 자동화하는 것이 중요한 것은 프로세스를 최대한 빨리 자동화하는 것입니다.그렇게 함으로써 매우 복잡한 모델을 개발한 다음 몇 시간 안에 생산을 위한 C 코드를 만들 수 있습니다.그리고 원하는 대로 모델을 업데이트할 수 있지만 코드는 유지하기 쉽습니다.
단점은 이 프로세스를 설정하는 것이 사소한 것도 아니고 완전히 일반적인 것도 아니라는 것입니다(한 가지 크기가 가장 적합하지 않음).
또한 생성된 코드가 실제로 사용한 모델을 나타내는지 확인하기 위해 몇 가지 테스트를 수행해야 합니다.이것은 보장되지 않으며, Matlab Coder가 상당히 신뢰할 수 있다고 생각하지만, 오류가 없는 것은 아닙니다.
위에서 말한 바와 같이, 그것은 당신의 신청에 달려 있습니다.(통신 시스템의) 디코더를 변환하려고 했지만 정확한 결과를 제공하지만 비트 수가 많은 경우 자체 MATLAB 버전보다 느립니다.그래서 저의 결론은 손으로 MATLAB 코드를 C로 변환하는 것이었습니다.
장점:
- 많은 복잡한 수학 함수를 사용할 수 있습니다.
- 하드코어 수학 프로그래밍 관련.
단점:
- C#, Java, Python과 같은 다른 현대 언어와 비교하면 인기가 없습니다. 이름만 대면 알 수 있습니다.
- 당신이 matlab을 코딩하기 때문에, 당신은 주로 복잡한 수학 문제 해결에 집중하는 경향이 있습니다.다른 언어는 그리기, 웹 개발 및 수학에서 다양한 작업에도 사용됩니다(확실히 matlab과 같은 풍부한 수학 기능을 가지고 있지는 않습니다).
제가 알고 있는 또 다른 이점은 다음과 같습니다.기술 프로그래밍에 최적화되었기 때문에 이 필드에 응용 프로그램을 작성할 때 성능이 향상될 수 있습니다.성능은 매우 신뢰할 수 있습니다. 이 질문을 살펴보십시오. 유용한 정보를 제공합니다.
MATLAB은 일반적인 C 코딩에 비해 많은 제약이 있다고 생각합니다.직접 사용할 수 있는 내장 블록이 매우 많다는 것에 동의하지만 MATLAB에서 코드를 작성하면 변수 정의부터 루프, 스위치 케이스까지 MATLAB 모델링에서 매우 많은 시간이 소요되기 때문에 C 코드에 비해 거의 5배 더 오래 걸립니다.
그리고 Simulink를 사용하여 모델을 만들었다고 가정해 보겠습니다. 하지만 다시 무언가를 추가하려고 하면 시간이 많이 걸리지만 C에서는 2분만 작업하면 됩니다.
다음 문제는 다른 프로그래밍 언어처럼 모델의 일부를 주석 처리할 수 없다는 것입니다.
대규모 프로젝트의 경우 MATLAB이 충돌하거나 손상되거나 중단될 수 있으며 상태 흐름의 시뮬레이션은 sh*t와 같습니다.
마지막으로, 인내심이 많은 경우에만 MATLAB 모델링(상태 흐름+시뮬링크)을 사용한다는 것을 말씀드리겠습니다.
언급URL : https://stackoverflow.com/questions/10940669/matlab-coder-vs-hand-coding
'programing' 카테고리의 다른 글
Python 3 웹 스크래핑의 HTTP 오류 403 문제 (0) | 2023.06.15 |
---|---|
현재 컨텍스트에 이름이 없습니다. (0) | 2023.06.15 |
파이썬에서 파일 경로에서 폴더 경로를 추출하려면 어떻게 해야 합니까? (0) | 2023.06.15 |
data.table 열 순서 변경 방법(복사하지 않음) (0) | 2023.06.15 |
Nokogiri 설치 실패 -libxml2가 누락되었습니다. (0) | 2023.06.15 |