두 행렬의 곱셈을 가속화하기 위해 simulink에서 c-mex sfunction을 구현하려고합니다. 지금까지 작동 중입니다. 그러나 입력 순서/시퀀스는 연결되어있는 장치의 명명 스키마에 의존한다는 것을 알았습니다. 상수. 설명을 위해 두 장의 그림을 첨부했습니다. 먼저 입력 이름을 Constant 및 Constant1로 지정했습니다. 그런 다음 입력 순서가 예상대로입니다. Constant를 Constant2로 변경하면 입력 시퀀스가 변경되므로 내 c-mex 기능이 올바르지 않습니다.
이제 제 질문은이 동작을 어떻게 바꿀 수 있습니까? 행렬 곱셈의 순서가 일반적으로 매우 중요하기 때문에 해결 방법을 구현할 수없는 경우 어떻게해야합니까?c-mex s-function에서 입력 순서를 결정하는 방법은 무엇입니까?
감사합니다.
편집 : 해결책을 찾았습니다. mdlSetInputPortDimensionInfo의 포트도 인쇄하면 명명 스키마에 따라 호출 순서가 달라진다는 것을 알 수 있습니다. 제 해결 방법은 sdGetInputPortDimensionSize로 다시 읽은 InputDimension을 기반으로 mdlSetDefaultPortDimensionInfo에서 출력 포트 크기를 설정하는 것입니다.
전체 코드
는 Github에서에서 찾을 수 있습니다 : 지금 해결 https://github.com/steffenmauch/Simulink-Eigen3
c-mex 인터페이스에 잘못된 paras가 전달 된 것 같습니다. 두 번째 경우에는 행렬이 올바르지 만 다른 순서로 정렬되어 있음을 분명히 볼 수 있습니다. 인터페이스에서주의 깊게 살펴보고, 특히 매트릭스의 요소 순서를 지정하는 것이 좋습니다. – Jake0x32
이것은 의도 한 s 함수의 동작이 아니므로 코드에 구현 오류가 있다고 가정합니다. 질문에 사용하는 코드를 추가하십시오. – Daniel
글쎄요, 요점은 : matA는 희미한 8x4이고 matB는 4x2입니다. 나는 weatherf [0]이 4x2 인 것을 printf를 사용하여 두 경우 모두 나타내지 만 그렇지 않습니다. 그렇다면 c-mex 파일 내의 순서가 연결된 상수의 이름에 따라 변경되는 이유는 무엇입니까? 두 그림은 명명 스키마가 어떻게 든 중요하다는 것을 시각화하기위한 것입니다. 지금까지 이것에 관한 어떤 정보도 찾지 못했습니다 ... – steffenmauch