데이터 스트림에서 효율적으로 최대 및 최소 계산

마티아 서 리키 오

저는 데이터 스트림으로 C에서 작업하고 있습니다. 기본적으로 n 밀리 초마다 6 개 요소의 열 배열을받습니다. 각 데이터 행의 최대 값을 계산하고 싶습니다.

이를 명확히하기 위해 이것은 내 데이터의 모습입니다 (이것은 장난감 예제이며 실제로 수천 개의 열을 획득 할 것입니다).

[6] [-10] [5]
[1] [5]   [3]
[5] [30]  [10]
[2] [-10] [0]
[-2][5]   [10]
[-5][0]   [1]

그래서 기본적으로 (말했듯이) n 밀리 초마다 데이터 열을 수신하고 최대 및 최소 값을 행 단위로 계산하고 싶습니다. 따라서 이전 예에서 결과는 다음과 같습니다.

max_values=[6,5,30,2,10,1]
min_values=[-10,1,5,-10,-2,-5]

나는 전체 행렬에 액세스 할 수 없으며 n 밀리 초마다 수신하는 6 개 요소의 단일 열에 대해서만 작업 할 수 있음을 지적하고 싶습니다.

이것은 지금까지의 간단한 코드 알고리즘입니다 (더 큰 프로젝트의 일부이므로 전체 코드를 생략하겠습니다).

 for(int i=0;i<6;i++){
        if(input[i]>temp_max[i]){
            temp_max[i]=input[i];
        }
        if(input[i]<temp_min[i]){
            temp_min[i]=input[i];
        }

    }

여기서 input, temp_max그리고 temp_min모두 차원 6의 부동 배열입니다. 기본적으로 내 코드는 새 입력 배열을 사용할 수있을 때마다이 코드를 실행하고 그에 따라 최대 값과 최소값을 업데이트합니다.

성능에 관심이 있기 때문에 (임베디드 시스템에서 실행 됨) 코드의이 부분을 개선 할 수있는 방법이 있습니까? 두 배열의 각 단일 요소에 대한 비교를 호출하는 것은 가장 현명한 생각이 아닙니다.

제롬 리차드

분기는 특히 임베디드 시스템에서 느립니다 . 스칼라 계산도 마찬가지 입니다. 바라건대, 타겟 프로세서가 NEON SIMD 명령어 세트를 지원하는 ARM 기반 프로세서 인 것 같습니다 (분명히 64 비트 ARM-V8 A53 아키텍처를 기반으로하는 프로세서 ). NEON은 행에서 4 개의 32 비트 부동 소수점 연산을 계산할 수 있습니다. 이것은 현재 코드 (컴파일러가 분명히 벡터화에 실패 함)보다 훨씬 빠릅니다.

다음은 예제 코드입니다 (테스트되지 않음).

void minmax_optim(float temp_min[6], float temp_max[6], float input[6]) {
    /* Compute the first 4 floats */

    float32x4_t vInput = vld1q_f32(input);
    float32x4_t vMin = vld1q_f32(temp_min);
    float32x4_t vMax = vld1q_f32(temp_max);

    vMin = vminq_f32(vInput, vMin);
    vMax = vmaxq_f32(vInput, vMax);
    vst1q_f32(temp_min, vMin);
    vst1q_f32(temp_max, vMax);

    /* Remainder 2 floats */

    float32x2_t vLastInput = vld1_f32(input+4);
    float32x2_t vLastMin = vld1_f32(temp_min+4);
    float32x2_t vLastMax = vld1_f32(temp_max+4);

    vLastMin = vmin_f32(vLastInput, vLastMin);
    vLastMax = vmax_f32(vLastInput, vLastMax);
    vst1_f32(temp_min+4, vLastMin);
    vst1_f32(temp_max+4, vLastMax);
}

결과 코드는 훨씬 빨라야합니다. 이 벡터화 된 구현의 명령어 수가 조건부 점프 명령어가없는 참조 구현보다 훨씬 적다는 것을 금 볼트에서 볼 수 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java에서 최소 및 최대 계산?

분류에서Dev

배열에서 최소 3 개 이상의 최소 및 최대 수 계산

분류에서Dev

최대 및 최소 타임 스탬프가있는 행에서 효율적으로 선택

분류에서Dev

최소 및 최대 값을 계산할 때 문자열에서 Double 유형으로의 변환이 유효하지 않습니다.

분류에서Dev

Pandas 데이터 프레임 날짜 시간 변환 및 최소 / 최대 계산

분류에서Dev

SpatialLinesDataFrame 객체에서 계산 된 최소 및 최대 좌표

분류에서Dev

R에서 최소, 최대 및 평균 계산

분류에서Dev

Numpy : 마스킹 된 배열 쌓기 및 최소 / 최대 계산

분류에서Dev

선형 데이터 분할 및 데이터 최대 계산 PHP

분류에서Dev

쿼리 최적화-SQL에서 효율적으로 일대 다 관계 테이블의 결과 조합

분류에서Dev

Hadoop에서 Oracle 핸들 삭제 및 최소 중단 시간으로 데이터를 내보내는 효율적인 방법은 무엇입니까?

분류에서Dev

파이썬에서 하루 중 시간을 기준으로 매분 최대 및 최소값에서 노출 시간을 계산하는 방법

분류에서Dev

포인터로 최대 및 최소

분류에서Dev

가속도계의 최소 및 최대 값 범위 및 센서 데이터 변환

분류에서Dev

카산드라 : 값 삽입 및 평균 / 최소 / 최대 업데이트

분류에서Dev

두 벡터의 공통 요소에 대한 인덱스를 효율적으로 계산

분류에서Dev

대상 ID별로 실행 길이 시퀀스 및 최대 값 계산

분류에서Dev

어떻게 효율적으로 팬더의 dataframe에서 최대를 실행 계산하려면?

분류에서Dev

Excel에서 최대에서 최소로 데이터 정렬

분류에서Dev

각 고유 항목에 대한 최대 및 최소를 계산하는 방법

분류에서Dev

SQL Server의 Datetime 문자열 목록에서 최소, 최대 및 평균 계산

분류에서Dev

postgresql에서 최대, 최소 및 평균을 계산하는 방법

분류에서Dev

Int에 대한 최소 및 최대 값 설정? 기계적 인조 인간

분류에서Dev

C # SslStream에서 지속적으로 읽기 (긴 연결, 최대 며칠 지속) 및 무한 루프없이 효율적으로 읽기

분류에서Dev

sqlite 데이터베이스의 최대 행 수? (효율적으로 쿼리하기 위해)

분류에서Dev

SQL Server에서 최대 및 최소 한도가있는 누적 합계

분류에서Dev

부분적으로 중복 된 행에 대한 Pandas, 행 유지 및 데이터를 최소값 또는 최대 값으로 교체

분류에서Dev

튜플 파이썬으로 사전에서 최대 및 최소 찾기

분류에서Dev

시계열 하이 차트에서 최소 및 최대 확대 / 축소를 설정할 수 있습니까?

Related 관련 기사

  1. 1

    Java에서 최소 및 최대 계산?

  2. 2

    배열에서 최소 3 개 이상의 최소 및 최대 수 계산

  3. 3

    최대 및 최소 타임 스탬프가있는 행에서 효율적으로 선택

  4. 4

    최소 및 최대 값을 계산할 때 문자열에서 Double 유형으로의 변환이 유효하지 않습니다.

  5. 5

    Pandas 데이터 프레임 날짜 시간 변환 및 최소 / 최대 계산

  6. 6

    SpatialLinesDataFrame 객체에서 계산 된 최소 및 최대 좌표

  7. 7

    R에서 최소, 최대 및 평균 계산

  8. 8

    Numpy : 마스킹 된 배열 쌓기 및 최소 / 최대 계산

  9. 9

    선형 데이터 분할 및 데이터 최대 계산 PHP

  10. 10

    쿼리 최적화-SQL에서 효율적으로 일대 다 관계 테이블의 결과 조합

  11. 11

    Hadoop에서 Oracle 핸들 삭제 및 최소 중단 시간으로 데이터를 내보내는 효율적인 방법은 무엇입니까?

  12. 12

    파이썬에서 하루 중 시간을 기준으로 매분 최대 및 최소값에서 노출 시간을 계산하는 방법

  13. 13

    포인터로 최대 및 최소

  14. 14

    가속도계의 최소 및 최대 값 범위 및 센서 데이터 변환

  15. 15

    카산드라 : 값 삽입 및 평균 / 최소 / 최대 업데이트

  16. 16

    두 벡터의 공통 요소에 대한 인덱스를 효율적으로 계산

  17. 17

    대상 ID별로 실행 길이 시퀀스 및 최대 값 계산

  18. 18

    어떻게 효율적으로 팬더의 dataframe에서 최대를 실행 계산하려면?

  19. 19

    Excel에서 최대에서 최소로 데이터 정렬

  20. 20

    각 고유 항목에 대한 최대 및 최소를 계산하는 방법

  21. 21

    SQL Server의 Datetime 문자열 목록에서 최소, 최대 및 평균 계산

  22. 22

    postgresql에서 최대, 최소 및 평균을 계산하는 방법

  23. 23

    Int에 대한 최소 및 최대 값 설정? 기계적 인조 인간

  24. 24

    C # SslStream에서 지속적으로 읽기 (긴 연결, 최대 며칠 지속) 및 무한 루프없이 효율적으로 읽기

  25. 25

    sqlite 데이터베이스의 최대 행 수? (효율적으로 쿼리하기 위해)

  26. 26

    SQL Server에서 최대 및 최소 한도가있는 누적 합계

  27. 27

    부분적으로 중복 된 행에 대한 Pandas, 행 유지 및 데이터를 최소값 또는 최대 값으로 교체

  28. 28

    튜플 파이썬으로 사전에서 최대 및 최소 찾기

  29. 29

    시계열 하이 차트에서 최소 및 최대 확대 / 축소를 설정할 수 있습니까?

뜨겁다태그

보관