KR20150008483A - 단일 데이터 버퍼의 병렬 처리 - Google Patents

단일 데이터 버퍼의 병렬 처리 Download PDF

Info

Publication number
KR20150008483A
KR20150008483A KR1020147034841A KR20147034841A KR20150008483A KR 20150008483 A KR20150008483 A KR 20150008483A KR 1020147034841 A KR1020147034841 A KR 1020147034841A KR 20147034841 A KR20147034841 A KR 20147034841A KR 20150008483 A KR20150008483 A KR 20150008483A
Authority
KR
South Korea
Prior art keywords
data
buffer
segments
data buffer
segment
Prior art date
Application number
KR1020147034841A
Other languages
English (en)
Inventor
션 엠. 걸리
와즈디 케이. 페갈리
비노드 고팔
제임스 디. 길포드
길버트 엠. 울리치
커크 에스. 얍
Original Assignee
인텔 코오퍼레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코오퍼레이션 filed Critical 인텔 코오퍼레이션
Publication of KR20150008483A publication Critical patent/KR20150008483A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/20Manipulating the length of blocks of bits, e.g. padding or block truncation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)
  • Microcomputers (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

단일 가변 길이 데이터 버퍼에 대해 직렬 데이터 처리 알고리즘을 실행하기 위해 기술들은 버퍼의 데이터 세그먼트들을 패딩하는 단계, 데이터 세그먼트들을 데이터 레지스터 내로 스트리밍하는 단계, 및 세그먼트들 각각에 대해 직렬 데이터 처리 알고리즘을 병렬로 실행하는 단계를 포함한다.

Description

단일 데이터 버퍼의 병렬 처리{PARALLEL PROCESSING OF A SINGLE DATA BUFFER}
관련 출원의 상호 참조
본 출원은 35 U.S.C.§119(e) 하에 2012년 7월 11일자로 출원된 미국 가출원 제61/670,472호 및 2012년 9월 28일자로 출원된 미국 출원 제13/631,763호에 대한 우선권을 주장한다.
데이터 파일들 및 컴퓨터 프로그램들의 보안을 검증하기 위한 소프트웨어는 운영 체제 부트 시퀀스, 프로그램 코드 또는 데이터 파일의 로딩, 웹 브라우징, 데이터 통신 및 데이터 저장과 같은 많은 상이한 상황들에서 널리 퍼져있다. 인증 및/또는 암호화를 위해 사용되는 것들과 같은 직렬 데이터 처리 알고리즘들은 단일 데이터 버퍼에 대해 연쇄 종속 방식으로 동작할 수 있다. 그러한 알고리즘들은 버퍼 내의 데이터의 1개 블록의 처리로부터 발생하는 출력이 후속 블록의 처리를 위해 종종 필요하다는 점에서 직렬 연쇄에 의해 제한될 수 있다.
예를 들어, MD5(메시지-다이제스트 알고리즘) 및 SHA1, SHA256 및 SHA512(보안 해시 알고리즘들)와 같은 암호 해시 함수들은 범용 프로세서들 상에서의 계산과 관련하여 비용이 많이 들 수 있다. 그러한 해시 함수들은 단일 데이터 버퍼들에 대해 순차적으로 작용하여, 각각의 데이터 블록으로부터 도출된 계산들을 이용하여 그리고 서로 의존하는 다수의 처리 라운드를 이용하여 해시 다이제스트 상태를 갱신한다. 단일 버퍼의 블록들의 순차적 처리는 현대의 프로세서들의 성능을 제한한다. 벡터 단일 명령 다중 데이터(SIMD) 유닛들을 이용하는 다중 버퍼 처리와 같은 방법들이 다수의 독립 데이터 버퍼에 대해 작용하는 것이 가능한 응용들에서의 보다 양호한 성능을 위해 제안되었지만, 그러한 방법들은 단일 버퍼의 해싱을 수반하는 응용들에는 적용할 수 없다. 다수의 코어 또는 엔진에 걸치는 것이지만, 또 하나의 사용되어온 기술은 트리 해싱이다.
본 명세서에서 설명되는 개념들은 첨부 도면들에 한정이 아니라 예시적으로 도시된다. 도시의 간명화를 위해, 도면들에 도시된 요소들은 반드시 축척으로 도시된 것은 아니다. 적절한 것으로 간주되는 경우에는 대응하거나 유사한 요소들을 지시하기 위해 도면들 사이에서 참조 부호들이 반복되었다.
도 1은 개시되는 방법들을 구현할 수 있는 컴퓨팅 장치의 적어도 일 실시예의 간이 블록도이다.
도 2는 단일 데이터 버퍼의 병렬 처리를 위한 시스템의 적어도 일 실시예의 간이 모듈도이다.
도 3은 단일 데이터 버퍼의 병렬 처리를 위한 방법의 적어도 일 실시예의 간이 흐름도이다.
본 발명의 개념들은 다양한 변경들 및 대안 형태들이 가능하지만, 본 발명의 특정 실시예들이 도면들에 예시적으로 도시되었으며, 본 명세서에서 상세히 설명될 것이다. 그러나, 본 발명의 개념들을 개시되는 특정 형태들로 한정하는 것을 의도하지 않으며, 본 명세서 및 첨부된 청구항들과 일치하는 모든 변경들, 균등물들 및 대안들을 포함하는 것을 의도한다는 것을 이해해야 한다.
본 명세서에서 "하나의 실시예", "실시예", "예시적인 실시예" 등에 대한 참조들은 설명되는 실시예가 특정 특징, 구조 또는 특성을 포함할 수 있지만, 모든 실시예가 반드시 그러한 특정 특징, 구조 또는 특성을 포함하거나 포함하지는 않을 수 있다는 것을 지시한다. 더욱이, 그러한 표현들은 반드시 동일 실시예를 참조하지는 않는다. 또한, 특정 특징, 구조 또는 특성이 일 실시예와 관련하여 설명될 때, 명확히 설명되는지의 여부에 관계없이 다른 실시예들과 관련하여 그러한 특징, 구조 또는 특성을 실시하는 것은 이 분야의 기술자의 지식 내에 있다는 것을 진술한다.
개시되는 실시예들은 일부 예들에서 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의 조합에서 구현될 수 있다. 개시되는 실시예들은 일시적 또는 비일시적 기계 판독 가능(예로서, 컴퓨터 판독 가능) 저장 매체에 의해 전달되거나 그에 저장된 명령어들로서 구현될 수도 있으며, 이러한 명령어들은 하나 이상의 프로세서에 의해 판독 및 실행될 수 있다. 기계 판독 가능 저장 매체는 기계(예로서, 휘발성 또는 비휘발성 메모리, 매체 디스크 또는 다른 매체 장치)에 의해 판독될 수 있는 형태로 정보를 저장 또는 전송하기 위한 임의의 저장 장치, 메커니즘 또는 다른 물리 구조로서 구현될 수 있다.
도면들에서, 일부 구조 또는 방법 특징들은 특정 배열들 및/또는 순서들로 도시될 수 있다. 그러나, 그러한 특정 배열들 및/또는 순서들은 필요하지 않을 수 있다는 것을 알아야 한다. 오히려, 일부 실시예들에서 그러한 특징들은 예시적인 도면들에 도시된 것과 다른 방식 및/또는 순서로 배열될 수 있다. 게다가, 특정 도면 내의 구조 또는 방법 특징의 포함은, 그러한 특징이 모든 실시예들에서 요구되며, 일부 실시예들에서는 포함되지 않을 수 있거나, 다른 특징들과 결합될 수 있다는 것을 암시하는 것을 의도하지 않는다.
이제, 도 1을 참조하면, 데이터 버퍼 처리 모듈(130)이 예시적인 컴퓨팅 장치(100) 내에 구현된다. 사용시에, 데이터 버퍼 처리 모듈(130)은 단일 데이터 버퍼(132)(예를 들어, 임의 길이의 스트링 또는 "메시지")를 입력으로서 취한다. 데이터 버퍼 처리 모듈(130)은 단일 데이터 버퍼(132)에 대한 병렬성의 레벨, 즉 직렬 데이터 처리 알고리즘(128)(예로서, 암호 해시 함수)에 의해 병렬로 처리될 수 있는 단일 데이터 버퍼(132)의 "세그먼트들"의 수를 결정한다. 데이터 버퍼 처리 모듈(130)은 알고리즘(128)에 의한 세그먼트들의 병렬 처리를 관리한다. 상이하지만, 그러한 병렬 처리 후의 알고리즘(128)의 출력은 전통적인 방식으로(예로서, 순차적으로) 단일 데이터 버퍼에 대해 알고리즘(128)을 실행함으로써 통상적으로 획득되는 결과들에 필적하는 보안 강도를 갖는다. 또한, 단일 데이터 버퍼(132)의 세그먼트화 및 병렬 처리의 결과로서 성능 이득이 달성될 수 있다. 이러한 방식으로, 데이터 버퍼 처리 모듈(130)은 기본 알고리즘이 특정 크기(예로서, 64 바이트)의 블록들에 대해 동작하는 경우에도 임의 길이의 단일 데이터 버퍼에 대해 직렬 데이터 처리 알고리즘을 수행할 수 있다.
예시적인 컴퓨팅 장치(100)는 적어도 하나의 프로세서(110), 메모리(120), 입/출력(I/O) 서브시스템(122), 저장 장치(124) 및 하나 이상의 주변 장치(140)를 포함한다. 컴퓨팅 장치(100)는 특정 응용에 따라, 예를 들어 데스크탑 컴퓨터 시스템, 랩탑 또는 태블릿 컴퓨터 시스템, 서버, 기업 컴퓨터 시스템, 컴퓨터들의 네트워크, 핸드헬드 또는 다른 이동 컴퓨팅 장치 또는 다른 전자 장치와 같은 임의 타입의 컴퓨팅 장치에서 또는 컴퓨팅 장치로서 구현될 수 있다.
예시적인 프로세서(110)는 본 명세서에서 설명의 편의를 위해 간단히 "코어들"로서 지칭되는 하나 이상의 프로세서 코어 또는 단일 코어의 논리 섹션들, 예를 들어 프로세서 코어들(112, 114, 116)을 포함한다. 일부 실시예들에서, 코어들(112, 114, 116) 중 하나 이상은 SIMD(Single Instruction, Multiple Data) 명령어 세트 또는 유사한 컴퓨터 명령어들의 세트를 이용하여 (일부 실시예들에서 데이터 버퍼 처리 모듈(130)과 같은) 단일 스레드 컴퓨터 프로그램들을 처리하도록 구성된다. 더 구체적으로, 일부 실시예들에서, 코어들(112, 114, 116) 중 적어도 하나는 스트리밍 SIMD 확장(SSE) 또는 후속 버전(예로서, SSEn 또는 AVX(Advanced Vector Extensions))과 같은 하나 이상의 스트리밍 확장을 포함하는 명령어 세트를 이용하여 구성된다.
코어 또는 코어들(112, 114, 116)은 하나 이상의 데이터 레지스터(118)를 포함하거나 이들에 통신적으로 결합된다. 레지스터들(118)은 직렬 데이터 처리 알고리즘(128), 데이터 버퍼 처리 모듈(130) 및/또는 컴퓨팅 장치(100)의 다른 컴포넌트들의 동작 동안 데이터 및/또는 명령어들을 임시 저장하는 데 사용될 수 있다. 각각의 레지스터(118)는 레지스터(118)가 주어진 시간에 저장할 수 있는 데이터의 양인 레지스터 크기 또는 "폭"을 갖는다. 데이터 레지스터들(118) 중 적어도 하나는 데이터 레벨 병렬성을 위해 구성된다. 예를 들어, 일부 실시예들에서, 적어도 하나의 데이터 레지스터(118)는 SIMD 또는 유사한 데이터 레벨 병렬 처리를 위해 구성되는데, 즉 동시에 또는 실질적으로 동시에 다수의 데이터에 대해 동일 동작을 수행할 수 있는 다수의 기능 유닛(예로서, "레인들", "데이터 경로들" 또는 "실행 유닛들")으로 분할될 수 있다. 예를 들어, 128 비트의 폭을 갖는 SIMD 또는 유사한 레지스터에서, 컴퓨터 명령어들은 데이터의 128 비트의 일부를 병렬로 각각 처리할 수 있는 레지스터(118)의 다수의 레인 또는 데이터 경로를 지정할 수 있으며, 따라서 알고리즘(128)은 다른 데이터 경로에 관계없이 데이터 경로들 각각에 대해 동시에 실행될 수 있다.
예시적인 코어들(112, 114, 116)은 또한 하나 이상의 캐시 메모리(도시되지 않음)를 포함하거나 그들에 통신적으로 결합된다. 캐시 메모리는 직렬 데이터 처리 알고리즘(128), 데이터 버퍼 처리 모듈(130) 및/또는 컴퓨팅 장치(100)의 다른 컴포넌트들의 동작 동안 데이터 및/또는 명령어들을 임시 저장하는 데 사용될 수 있다. 캐시 메모리 및 레지스터들(118)에 더하여, 프로세서(110) 및 그의 코어들(112, 114, 116)은 메모리(120)를 포함하거나 그에 통신적으로 결합된다. 메모리(120)의 부분들은 동적 랜덤 액세스 메모리 장치(DRAM), 동기식 동적 랜덤 액세스 메모리 장치(SDRAM), 더블 데이터 레이트 동적 랜덤 액세스 메모리 장치(DDR SDRAM) 및/또는 다른 휘발성 메모리 장치들과 같은 임의 타입의 적절한 메모리 장치로서 구현될 수 있다.
프로세서(110)는 또한 I/O 서브시스템(122)에 통신적으로 결합된다. 구체적으로 도시되지 않지만, I/O 서브시스템(122)은 통상적으로 메모리 제어기(예로서, 메모리 제어기 서브시스템 또는 노스브리지), 입/출력 제어기(예로서, 입/출력 제어기 서브시스템 또는 사우스브리지) 및 펌웨어 장치를 포함한다. 물론, 다른 실시예들에서는, 다른 구성들을 갖는 I/O 서브시스템들이 사용될 수 있다. 예를 들어, 일부 실시예들에서, I/O 서브시스템(122)은 시스템 온 칩(SoC)의 일부를 형성할 수 있고, 프로세서(110) 및 컴퓨팅 장치(100)의 다른 컴포넌트들과 함께 단일 집적 회로 칩 상에 통합될 수 있다. 따라서, I/O 서브시스템(122)의 각각의 컴포넌트는 일부 실시예들에서 공통 집적 회로 칩 상에 배치될 수 있다.
예시적인 I/O 서브시스템(122)은 하나 이상의 저장 장치(124)에 통신적으로 결합된다. 저장 장치(124)의 부분들은 데이터 및/또는 명령어들을 저장하기 위한 임의의 적절한 장치, 예를 들어 디스크 저장 장치(예로서, 하드 디스크), 메모리 카드, 메모리 스틱 및/또는 기타로서 구현될 수 있다. 일부 실시예들에서, 직렬 데이터 처리 알고리즘(128), 데이터 버퍼 처리 모듈(130) 및/또는 단일 데이터 버퍼(132)는 저장 장치(124) 내에 적어도 일시적으로 구현된다. 실행 동안, 직렬 데이터 처리 알고리즘(128), 데이터 버퍼 처리 모듈(130) 및/또는 단일 데이터 버퍼(132)의 부분들은 더 빠른 처리 또는 다른 이유들로 메모리(120), 캐시 메모리 및/또는 레지스터들(118) 내에 로딩될 수 있다. 다른 실시예들에서, 직렬 데이터 처리 알고리즘(128) 및/또는 데이터 버퍼 처리 모듈(130)은 회로, 기계 실행 가능 논리 유닛 등으로서 구현될 수 있다. 즉, 직렬 데이터 처리 알고리즘(128) 및/또는 데이터 버퍼 처리 모듈(130) 각각은 다양한 실시예들에서 소프트웨어, 펌웨어, 하드웨어 및/또는 이들의 조합으로서 구현될 수 있다. 또한, 데이터 버퍼 처리 모듈(130)은 직렬 데이터 처리 알고리즘(128)의 서브모듈 또는 "확장"으로서 또는 직렬 데이터 처리 알고리즘(128) 및/또는 다른 소프트웨어(예로서, 운영 체제, 보안 애플리케이션 및/또는 기타)에 의해 호출될 수 있는 함수, 프로시저 또는 라이브러리 객체로서 구현될 수 있다. 예를 들어, 버퍼 처리 모듈(130)은 보안 해시 알고리즘과 같은, 기존 또는 미래의 암호 해시 알고리즘에 대한 하나 이상의 소프트웨어 확장으로서 구현될 수 있다.
I/O 서브시스템(122)은 하나 이상의 주변 장치(140)에 통신적으로 결합될 수 있다. 주변 장치(들)(140)는 예를 들어 컴퓨팅 장치(100)의 사용 의도에 따라 하나 이상의 네트워크 인터페이스, 그래픽 및/또는 비디오 어댑터, 키보드, 터치스크린, 디스플레이, 프린터, 데이터 저장 장치 및/또는 다른 주변 장치를 포함할 수 있다. 또한, 컴퓨팅 장치(100)는 설명의 명료화를 위해 도 1에 도시되지 않은 다른 컴포넌트들, 서브컴포넌트들 및 장치들을 포함할 수 있다는 것을 알아야 한다.
일반적으로, 컴퓨팅 장치(100)의 컴포넌트들은 도 1에 도시된 바와 같이 양방향 화살표들로서 도식적으로 표현되는 하나 이상의 신호 경로에 의해 통신적으로 결합된다. 그러한 신호 경로들은 각각의 장치들 사이의 통신을 용이하게 할 수 있는 임의 타입의 유선 또는 무선 신호 경로들로서 구현될 수 있다. 예를 들어, 신호 경로들은 임의 수의 와이어, 인쇄 회로 보드 트레이스, 비아, 버스, 점대점 상호접속, 개재 장치 및/또는 기타로서 구현될 수 있다.
이제, 도 2를 참조하면, 버퍼 처리 모듈(130)이 입력 데이터 버퍼(210)에 대한 직렬 데이터 처리 알고리즘(128)의 병렬 실행을 관리하는 예시적인 시스템(200)이 도시된다. 예시적인 입력 데이터 버퍼(210)는 (예로서, 비트 또는 바이트 단위로 측정되는) 임의 크기 또는 길이 L를 갖는 데이터 문자들(예로서, 데이터 파일 또는 "메시지")의 스트링이다. 아래에 더 상세히 설명되는 바와 같이, 버퍼 처리 모듈(130)은 입력 데이터 버퍼(210)의 내용들을 다수의 세그먼트(S)로 분할하며, 세그먼트들의 수는 바람직하거나 시스템(200)의 특정 설계 또는 구현의 요구들이 주어질 경우에 가능한 입력 데이터 버퍼(210)에 대한 병렬성의 레벨 또는 정도를 표현하는 양의 정수이다. 예시적인 실시예들에서, 각각의 세그먼트는 직렬 데이터 처리 모듈(128)의 요구들에 따라 지정 길이로 패딩될 수 있다. 즉, 패딩 전의 세그먼트의 길이 및 직렬 데이터 처리 알고리즘(128)의 사양들에 따라, 일부 세그먼트들은 패딩될 수 있는 반면, 다른 세그먼트들은 패딩되지 않는다.
버퍼 처리 모듈(130)은 입력 데이터 버퍼(210)의 내용들(예로서, 필요에 따라 패딩된 세그먼트들)을 데이터 레지스터(118) 내로 스트리밍하며, 따라서 각각의 세그먼트가 레지스터(118)의 상이한 레인 또는 데이터 경로에 할당된다. 버퍼 처리 모듈(130)은 레지스터(118)의 각각의 레인 또는 데이터 경로에 대한 알고리즘(128)의 실행을 병렬로 개시하며, 따라서 각각의 세그먼트가 직렬 데이터 처리 알고리즘(128)에 의해 동시에 처리된다.
알고리즘(128)은 (예를 들어, 비트 또는 바이트 단위로 측정되는) 지정된 크기 B의 데이터 블록들에서 직렬로, 데이터 버퍼(210)의 (필요에 따라 패딩된) 세그먼트들 각각을 병렬로 처리하며, 각각의 데이터 블록은 (예를 들어, 비트 또는 바이트 단위로 측정되는) 크기 W의 다수의 데이터 워드로 구성되고, 따라서 B는 W의 배수이다. 알고리즘(128)은 각각의 세그먼트에 대한 출력(또는 일부 실시예들에서 "메시지 다이제스트" 또는 "해시 다이제스트")을 생성하며, 이는 출력 데이터 버퍼(212) 내에 적어도 임시로 저장될 수 있다. 출력 데이터 버퍼들(212(1)...212(S))(S는 세그먼트들의 수) 각각의 내용들은 (예를 들어 비트 또는 바이트 단위로 측정되는) 고정 길이 D를 갖는다. 입력 데이터 버퍼(210) 및 출력 데이터 버퍼들(212(1)...(S)) 양자는 다양한 실시예들에서 단일 데이터 버퍼(132)로서 또는 하나 이상의 임시 저장 버퍼 내에 구현될 수 있다. 예를 들어, 단일 데이터 버퍼(132)의 내용들은 처음에 입력 데이터 버퍼(210)의 내용들에 대응할 수 있으며, 버퍼 처리 모듈(130) 및/또는 직렬 데이터 처리 알고리즘(128)의 실행이 진행됨에 따라 갱신될 수 있다.
일부 실시예들에서, 알고리즘(128)은 MD5, SHA1, SHA256 또는 SHA512와 같은 암호 해시 함수이며, 데이터 버퍼 처리 모듈(130)은 세그먼트들의 수(S)를 결정함에 있어서 (예를 들어, 관련 FIPS PUB(Federal Information Processing Standards Publication)에서 정의되는 바와 같은) 암호 해시 함수의 소정 사양들을 파라미터들로서 사용한다. 일례로서, SHA256 보안 해시 함수에 대한 표준들은 B=512비트, W=32비트 및 D=256비트를 지정한다. 표준 SHA256 해시 함수는 임의 길이 입력 버퍼의 내용들을 크기 B의 블록들로 분할하고, 각각의 라운드에서 블록으로부터 크기 W의 워드를 이용하여 각각의 블록에 대해 다수의 계산 라운드를 실행한다. 각각의 라운드는 버퍼를 갱신하며, 따라서 하나의 라운드의 출력은 후속 라운드에 대한 입력이다.
전통적으로, SHA256 해시 함수는 입력 버퍼의 내용들의 블록들을 순차적으로 처리하며, 따라서 입력 버퍼 내의 각각의 데이터 블록이 처리될 때까지, 하나의 블록에 대해 생성되는 해시 다이제스트는 다음 블록의 처리를 위한 초기 해시 다이제스트로서 사용되고, 기타 등등이다. 이와 달리, 버퍼 처리 모듈(130)은 단일 데이터 버퍼에 걸쳐 다수의 세그먼트를 정의하며 - 각각의 세그먼트는 하나 이상의 데이터 블록을 포함함 -, 데이터 버퍼의 세그먼트들 각각에 대해 알고리즘(128)을 병렬로 적용한다. 예를 들어, 데이터 레지스터가 256 비트의 폭을 갖는 경우, 버퍼 처리 모듈(130)은 입력 데이터 버퍼(210)의 내용들을 (레지스터 폭)/W 또는 256/32 = 8 세그먼트로 분할하고, 8개의 세그먼트 각각에 대해 알고리즘(128)을 병렬로 실행할 수 있다.
이제, 도 3을 참조하면, 단일 데이터 버퍼의 병렬 처리를 위해 버퍼 처리 모듈(130) 및/또는 컴퓨팅 장치(100)의 다른 모듈들 또는 컴포넌트들에 의해 전산화된 프로그램, 루틴, 논리 및/또는 명령어로서 실행될 수 있는 예시적인 방법(300)이 도시된다. 블록 310에서, 방법(300)은 입력 데이터 버퍼(210)의 내용들을 분할할 세그먼트들의 수(S)를 결정하고, 그에 따라 입력 버퍼(210)의 내용들을 분할함으로써 결정된 수의 세그먼트들을 생성한다. 일부 실시예들에서, 세그먼트들의 수는 사전 결정될 수 있고, (예를 들어, 탐색표 또는 데이터베이스로부터) 파라미터, 독립변수 또는 저장된 값으로서 간단히 액세스될 수 있다. 다른 실시예들에서, 세그먼트들의 수는 로드 시간 또는 실행 시간에 결정될 수 있다. 일부 실시예들에서, 세그먼트들의 수는 레지스터(118)의 폭, 직렬 데이터 처리 알고리즘(128)의 파라미터들 또는 사양들(예로서, 블록 크기, 워드 크기, 출력 길이 등) 및/또는 입력 데이터 버퍼(210)의 길이의 함수일 수 있다. 일례로서, SHA256 해시 함수가 알고리즘(128)으로서 사용되는 경우, S=8, W=4 바이트 및 B=64 바이트이다.
여전히, 블록 310에서, 세그먼트들 각각은 특정 폭(예로서, 32 비트)을 갖는 데이터 워드들로 구성되는 것으로 정의된다. 일부 실시예들에서, 세그먼트 워드 폭은 알고리즘(128)에 의해 지정된 워드 폭 W에 대응한다. 세그먼트들은 입력 데이터 버퍼(210)의 모든 Sth 워드를 이용하여 각각 생성되며, 따라서 세그먼트의 길이는 블록 크기 B에 의해 균일하게 나눌 수 있다. 입력 데이터 버퍼(210)의 내용들 중 얼마가 동일 크기의 세그먼트들에서 처리될 수 있는지를 결정하기 위해, 입력 데이터 버퍼(210)의 길이 L은 세그먼트 블록 크기(S에 B를 곱한 값 또는 SB)로 나누어진다. 입력 데이터 버퍼의 길이 L이 SB에 의해 균일하게 나누어지지 않는 경우, 세그먼트들 중 하나 이상이 패딩될 수 있거나, 나머지 데이터를 포함하는 최종 세그먼트가 생성될 수 있다. SHA256 예에서, SB = 8*64 = 512 바이트이다. 8개의 세그먼트가 존재하므로, 각각의 세그먼트는 입력 데이터 버퍼(210) 내의 매 8개의 데이터 워드(32 비트 또는 4 바이트)를 이용하여 최대 512*N 비트까지 형성되며, N은 양의 정수이고, 512*N은 L보다 작다.
블록 312에서, 방법(300)은 필요에 따라 전처리 루틴의 일부로서 또는 "온더플라이로(on the fly)" 세그먼트들 각각의 임의의 필요한 패딩을 수행한다. 예를 들어, 암호 해시 함수들의 경우, 각각의 세그먼트는 메시지의 끝에 다수의 데이터 비트 플러스 버퍼 길이의 지시를 (예로서, 연결에 의해) 첨부함으로써 필요에 따라 패딩될 수 있으며, 따라서 세그먼트는 선택된 알고리즘(128)에 의한 처리를 위해 지정된 길이를 갖게 된다. 일부 실시예들에서, 패딩은 "1" 비트, 이어서 필요한 수의 "0" 비트, 이어서 버퍼 길이를 포함한다. 다른 실시예들에서는, 각각의 세그먼트의 패딩에서 "0" 및 "1" 비트들의 다른 조합들 또는 패턴들이 사용될 수 있다. 기본 알고리즘(128)을 정의하는 표준들 또는 사양들은 패딩 스킴을 지정한다. 일부 실시예들에서, 세그먼트들 각각은 패딩된 버퍼가 블록 크기의 최소 배수가 되게 하기에 충분한 비트들의 수만큼 확장된다. 예를 들어, 버퍼(210)의 각각의 세그먼트는 B 바이트의 그의 가장 가까운 배수로 패딩된 후에, S개의 다이제스트를 생성하기 위해 알고리즘(128)에 적용되는 S-웨이(S-way) SIMD 처리를 이용하여 처리될 수 있다. 이 경우, 알고리즘(128)의 표준 패딩 스킴에 따라 세그먼트별 패딩이 수행된다. 일부 예들에서(예를 들어, 나머지 세그먼트의 경우), 세그먼트는 다른 패딩된 세그먼트들과 다른 패딩된 길이를 가질 수 있다. 예를 들어, 패딩은 세그먼트 내의 데이터의 양 플러스 필요한 패딩이 블록 크기를 초과할 때 세그먼트가 추가적인 블록을 갖게 할 수 있다.
블록 314에서, 방법(300)은 세그먼트들을 레지스터(118)의 데이터 경로들 내로 스트리밍하거나 입력(read)하며, 따라서 각각의 세그먼트는 (예를 들어, 인터리빙을 이용하여) 상이한 데이터 경로 내로 입력된다. 일부 실시예들에서, 이것은 SB까지, 즉 균일한 크기의 세그먼트들 모두가 처리될 때까지 증가되는 단일 데이터 포인터를 이용하여 달성된다. SHA256 예에서는, 한꺼번에 8개의 32비트 워드가 레지스터의 8개의 데이터 경로 내로 입력된다. 다른 예로서, 128 비트 레지스터들을 갖는 SIMD 가능 마이크로프로세서 상에서 SHA-1을 실행하는 것은 다음의 파라미터 설정들, 즉 B=64 바이트, W=4 바이트, S=4, D=20 바이트를 가질 것이다.
블록 316에서, 직렬 데이터 처리 알고리즘(128)이 패딩된 데이터 세그먼트들 각각에 대해 병렬로 실행된다. 즉, 각각의 패딩된 세그먼트에 대해, 알고리즘(128)은 그 세그먼트의 블록들을 순차적으로 처리하는 동시에, 알고리즘(128)은 다른 세그먼트들을 유사하게 처리한다. 따라서, 각각의 패딩된 세그먼트에 대해 중간 결과(예로서, 해시 다이제스트)가 생성된다. SHA256 예에서, SHA256 알고리즘은 각각의 데이터 경로/32비트 워드에 대해 실질적으로 동시에 실행되고, 이어서 다음 8개의 워드가 레지스터 데이터 경로들 내로 입력되고, SHA256 알고리즘에 의해 병렬로 처리되며, 블록 크기 B까지 기타 등등으로 처리된다.
각각의 데이터 세그먼트가 알고리즘(128)의 사양들에 따라 패딩되고 처리된다는 사실로 인해, 일부 실시예들에서는 개별 세그먼트 결과들이 결합될 필요가 없다. 따라서, 세그먼트 결과들은 개별 버퍼들 내에 또는 (예를 들어, 연결되는 경우) 하나의 버퍼 내에 함께 저장될 수 있다. 옵션으로서, 블록 318에서, 개별적인 S개의 다이제스트를 결합하여 단일 결과, 예를 들어 알고리즘(128)의 최종 출력을 형성할 수 있다. 예를 들어, S개의 다이제스트의 세트는 길이 S*D의 다른 데이터 버퍼로서 취급될 수 있으며, 이어서 크기 D의 최종 해시가 단일 버퍼 방식으로 생성될 수 있다. 세그먼트 결과들은 배타적 논리합(XOR) 또는 가산(ADD) 함수의 이용 또는 세그먼트 결과들을 연결한 후에 알고리즘(128)을 다시 실행하는 것을 포함하는 다수의 상이한 방식으로 결합될 수 있다. SHA256 예를 이용하면, 8개의 해시 다이제스트 각각은 하나의 256 비트 해시 다이제스트로 결합될 수 있다. 이 분야의 기술자들은 방법(300)이 다른 프로세서 구성들 또는 직렬 데이터 처리 알고리즘들에 쉽게 적응될 수 있다는 것을 알아야 한다. 예를 들어, 다른 레지스터 폭들을 갖는 레지스터들이 사용될 수 있다. 일례로서, 512 비트의 폭을 갖는 AVX3을 이용하는 경우, 세그먼트들의 수(S)는 8개가 아니라 16개일 수 있으며, 각각의 세그먼트는 매 16개의 워드(32비트)로 구성될 수 있다.
일부 실시예들에서, 데이터 세그먼트들은 인터리빙된 독립 버퍼들과 유사하며, 전술한 바와 같이 그러한 세그먼트들에 대해 다수의 독립 해시 다이제스트가 병렬로 생성된다. 일부 실시예들에서, 인터리빙된 세그먼트들의 수는 2의 거듭제곱이다. 세그먼트들의 생성에 있어서, 방법(300)의 일부 실시예들은 버퍼(210)를 블록 또는 더 큰 크기의 처리 부분들로 분할하는 것이 아니라 데이터를 더 미세한 입도로(예를 들어, 데이터 워드들로) 인터리빙한다.
도 3을 다시 참조하면, 방법(300)의 예시적인 실시예는 각각 크기 B 바이트의 정수 개의 블록에 대해 작용하도록 정의되는 해시 알고리즘 H를 사용한다. 아래의 실시예는 주어진 레벨의 병렬성 S를 이용하여 길이 L의 메시지(M0)를 해싱한다(여기서,
Figure pct00001
심벌은 연결을 나타낸다). 세그먼트들이 생성된 후, H와 관련된 패딩 함수는 사전 결정된 패턴 및 B 바이트의 배수인 최소 길이에 대한 세그먼트 길이의 연결을 이용하여 메시지의 각각의 세그먼트를 확장한다.
도 3의 블록 310을 참조하면, 메시지(M0)는 각각 길이 L/S의 S개의 세그먼트로 분할된다. 메시지(M0)는 인터리빙 방식으로 분할될 수 있으며, 따라서 M0의 워드 크기 W 비트마다 상이한 세그먼트에 할당된다. 각각의 세그먼트는 W 비트 워드들의 어레이로서 표현될 수 있다.
Figure pct00002
여기서, 각각의 M0[n]은 메시지 내로의 워드 크기 W 인덱스이다. 도 3의 블록 312를 참조하면, 알고리즘(128)에 의해 지정되는 패딩 함수를 메시지의 각각의 세그먼트에 적용하여, 패딩된 길이를 각각 갖는 개별 세그먼트들을 생성한다. 각각의 세그먼트의 패딩된 길이는 각각의 세그먼트가 확장될 수 있는 최소 길이이며, B 바이트의 배수이다. 전술한 바와 같이, 일부 세그먼트들은 다른 세그먼트들과 다른 패딩된 길이를 가질 수 있다.
도 3의 블록 316을 참조하면, 패딩된 세그먼트들에 대해 S개의 리프-레벨 다이제스트(Dk)가 k=0...(S-1)에 대해 Dk=H(Segk)로서 생성된다. (옵션으로서) 도 3의 블록 318을 참조하면, 블록 316으로부터의 결과적인 다이제스트들을 워드 크기 W 비트마다 인터리빙함으로써 새로운 메시지(M1)가 생성될 수 있다.
Figure pct00003
인 경우, 각각의 Dk[n]은 세그먼트의 다이제스트 내로의 워드 크기 W 인덱스일 수 있다. 이어서, 해시 알고리즘 H가 M1에 적용될 수 있다(예로서, H(M1)).
일부 실시예들에서, 메모리 내에 정렬된 데이터 버퍼(210)의 내용들은 전치에 대한 필요 없이 SIMD 레지스터들 내로 직접 입력(read into)(예로서, "스트리밍")된다. 일부 실시예들에서, 방법(300)은 시작 시간에 버퍼(210)의 길이를 알 필요 없이 (예로서, 네트워크 접속으로부터) 스트리밍되는 데이터가 레지스터(118) 내로 직접 공급되는 것을 가능하게 한다. 따라서, 단일 스레드 애플리케이션들은 개시되는 병렬 처리의 성능 이익들을 이용하기 위해 (해시 알고리즘 레벨에서와 달리) 변경될 필요가 없다.
일부 실시예들에서, 알고리즘(128)은 계산 및/또는 보안 사항들에 기초하여 선택 또는 배열될 수 있으며, 다양한 프로토콜들/표준들에서의 암호 해시 알고리즘들의 현재의 (아마도 배열된) 리스트는 본 명세서에서 개시되는 바와 같은 병렬 버전들(예로서, SHA1x4, SHA1x8, SHA256x4, SHA256x8 등)을 이용하여 증대될 수 있다.
일부 실시예들, 예를 들어 안전하게 로딩되는 파일들의 서명들의 검증을 수반하는 응용들에서, 서명 엔티티는 선택된 보안의 기존 암호 해싱 알고리즘(예로서, SHA256)을 검증을 위해 계산하는 데 가장 효율적인 방법(300)의 일 버전으로 교체한다. 예를 들어, 검증 엔티티가 그의 프로세서 코어 내에 128비트 SIMD 데이터 경로 실행 유닛을 갖는 경우에 그리고 SHA256 강도 다이제스트가 요구되는 경우에, SHA256x4 알고리즘이 바람직할 수 있다(SHA256 알고리즘은 32비트 기반이므로, 128 비트 SIMD 실행 유닛이 128/32 = 4개의 세그먼트를 병렬로 처리할 수 있다). 따라서, 현재 사용되는 32비트 알고리즘들(예로서, MD5, SHA1, SHA256) 중 하나를 사용하는 대신에, 검증 엔티티는 대응하는 MD5x8, SHA1x4, SHA256x4 병렬 알고리즘을 사용할 것이다. 일부 실시예들에서는, 128비트 SIMD 관점에서 4개의 세그먼트만이 필요한 경우에도, 알고리즘의 제한된 데이터 종속 체인으로 인해 MD5에 대해 추가적인 병렬성이 요구될 수 있다.
상이한 계산 강도의 많은 검증 장치가 존재할 수 있는 실시예들에서, 서명 엔티티는 그의 검증 장치들의 대부분에 대해 작용하는 병렬성의 레벨을 결정하는 것이 필요할 수 있다. 개시되는 실시예들은 서버가 이것을 매우 정확하게 추정할 것을 요구하지 않는데, 그 이유는 서명 동안 더 큰 레벨의 병렬성이 생성될 수 있고, 검증 에이전트들은 그들의 SIMD 또는 하드웨어 능력이 지정된 많은 세그먼트를 동시에 처리할 수 없는 경우에 검증 동안 멀티-패스 접근법을 수행할 수 있기 때문이다. 예를 들어, 서명자는 x4 스킴을 이용할 수 있는 반면, 검증 에이전트는 x2 스킴의 2개의 패스를 수행할 수 있다.
일부 실시예들에서, (예를 들어, 다이제스트들의 다수의 상태 변수의 관리로 인해) 너무 많은 패스가 요구되는 경우에 소정의 효율 손실이 발생할 수 있지만, 여전히 데이터를 단 한 번에 스트리밍 방식으로 가져올 수 있다. 이 경우, 애플리케이션은 상태 변수들의 세트들을 통해 순환할 필요가 없을 것이다. 예를 들어, 일부 예들에서, 클라이언트 장치는 SIMD 유닛을 전혀 갖지 않을 수 있으며, SHA256x4 해시를 처리하기 위해 간단한 스칼라 연산들을 수행하는 것이 필요하다. 이 경우, 한 세트의 SHA256 상태 변수들(32 바이트)을 이용하여 작업하는 대신에, 상태 변수들의 4개의 그러한 사본(128 바이트)에 대해 그들을 통해 순환하면서 동시에 작업할 것인데, 이는 데이터 버퍼로부터 워드들을 처리하기 때문이다. 이러한 상태 크기의 증가는 매우 작다. 그러나, (예를 들어, SHA에 대한) 블록에 대한 메시지 스케줄들과 관련된 작업 세트 크기 증가는 일부 예들에서 바람직하지 못할 수 있다. 작업 세트 크기의 증가가 문제가 되는 경우, 데이터의 4개의 블록을 저장하고, 한 번에 하나의 인터리빙된 블록에 대해 엄격하게 작업하는 것을 선택할 수 있다. 많은 다른 변형이 가능하며, 다양한 실시예들은 임의의 장치가 과도한 부담 없이 병렬 해시 서명을 효율적으로 처리하게 할 수 있다. 그러나, 고정된 하드웨어 엔진이 주어진 버퍼/길이 입력에 대해 패딩을 포함하는 전체 해시 함수를 수행하도록 설계되는 경우, 패딩은 동일한 결과를 얻기 위해 하드웨어와 동일하게 설계될 수 있다. 하드웨어 엔진이 블록 단위로 작업하거나, 패딩을 포함하지 않는 모드를 갖는 경우, 개시되는 멀티 해시 방법들을 수행하는 데 사용될 수 있다.
개시되는 실시예들은 고도의 병렬성(예로서, x32 또는 x64)이 가능하지만, 일부 실시예들에서는 기존의 장치들 또는 적절히 예측되는 미래의 장치들의 능력들(예로서, x4 또는 x8)에 따라 방법(300)을 구성하는 것이 바람직할 수 있다.
일부 실시예들에서, 적절한 크기의 1KB 데이터 버퍼에 대한 최상의 SHA256 알고리즘 계산에 대해 약 2.6x 성능 이득을 제공하기 위해 방법(300)의 SHA256x4 버전이 설명되었다. 일부 실시예들에서, 표준 MD5 알고리즘에 대해 약 4.4x 성능 이득을 제공하기 위해 방법(300)의 MD5x8 버전이 설명되었다. 멀티 해시 성능은 미래의 프로세서들의 데이터 경로 폭들의 증가에 비례하여 스케일링되어야 한다. 또한, 개시되는 실시예들을 이용하는 경우, 결과적인 다이제스트는 적어도, 기본 해시 함수의 직접 적용에 의해 얻어지는 다이제스트만큼 안전하고 충돌에 강할 것이다. 오늘날 가장 일반적으로 사용되는 해시 함수들에 더하여, 개시되는 실시예들은 새로운 SHA3 후보들에 대해 적응될 수 있다.
예들
본 명세서에서 개시되는 장치들, 시스템들 및 방법들의 예들이 아래에 제공된다. 장치들, 시스템들 및 방법들의 실시예는 후술하는 예들 중 어느 하나 이상 또는 임의의 조합을 포함할 수 있다.
예 1은 데이터 버퍼를 처리하기 위한 컴퓨팅 장치를 포함한다. 상기 컴퓨팅 장치는 버퍼 길이 및 복수의 데이터 세그먼트를 갖는 임의 길이 데이터 버퍼에 액세스하고 - 각각의 데이터 세그먼트는 0보다 크고 상기 버퍼 길이보다 작은 세그먼트 길이를 가짐 -; 직렬 데이터 처리 알고리즘에 따라 각각의 데이터 세그먼트를 패딩하고; 상기 패딩된 데이터 세그먼트들 각각을 데이터 레지스터 내로 직접 입력하고 - 상기 데이터 레지스터는 복수의 데이터 경로를 갖고, 각각의 패딩된 데이터 세그먼트는 상이한 데이터 경로 내로 직접 입력됨 -; 상기 데이터 경로들 각각에 대해 직렬 데이터 처리 알고리즘을 실질적으로 병렬로 수행하여 각각의 데이터 경로에 대한 결과를 생성하기 위한 데이터 버퍼 처리 모듈을 포함한다.
예 2는 예 1의 내용을 포함하고, 상기 데이터 버퍼는 임의의 길이를 갖는다.
예 3은 예 1 및 2 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼 처리 모듈은 상기 패딩된 데이터 세그먼트들 각각을 상기 데이터 레지스터의 상이한 데이터 경로 내로 직접 입력하기 위한 데이터 버퍼 처리 모듈을 포함한다.
예 4는 예 1-3 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼 처리 모듈은 상기 직렬 데이터 처리 알고리즘에 따라 상기 데이터 세그먼트들 각각을 패딩하기 위한 데이터 버퍼 처리 모듈을 포함한다.
예 5는 예 1-4 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼 처리 모듈은 암호 해시 알고리즘에 대한 확장으로서 구현된다.
예 6은 예 1-5 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼 처리 모듈은 상기 컴퓨팅 장치의 마이크로프로세서의 단일 코어 상에서 실행하기 위한 데이터 버퍼 처리 모듈을 포함한다.
예 7은 예 1-6 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼 처리 모듈은 상기 단일 코어의 단일 스레드 상에서 실행하기 위한 데이터 버퍼 처리 모듈을 포함한다.
예 8은 예 1-7 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼 처리 모듈은 상기 컴퓨팅 장치의 단일 명령어, 다중 데이터 가능 프로세서 상에서 실행하기 위한 데이터 버퍼 처리 모듈을 포함한다.
예 9는 예 1-8 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼 처리 모듈은 단일 스레드 소프트웨어 애플리케이션과 함께 실행하기 위한 데이터 버퍼 처리 모듈을 포함한다.
예 10은 임의 길이 데이터 버퍼를 처리하기 위한 방법을 포함한다. 상기 방법은 상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 가짐 -; 직렬 데이터 처리 알고리즘에 따라 각각의 데이터 세그먼트를 패딩하는 단계; 상기 패딩된 데이터 세그먼트들을 데이터 레지스터 내로 스트리밍하는 단계 - 상기 데이터 레지스터는 복수의 데이터 경로 실행 유닛을 갖고, 각각의 패딩된 데이터 세그먼트는 단일 데이터 포인터를 이용하여 상이한 데이터 경로 실행 유닛 내로 스트리밍됨 -; 및 상기 데이터 경로 실행 유닛들 각각에서 직렬 데이터 처리 알고리즘을 실질적으로 병렬로 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하는 단계를 포함한다.
예 11은 예 10의 내용을 포함하고, 상기 데이터 레지스터의 폭 및 상기 직렬 데이터 처리 알고리즘에 의해 지정된 워드 크기에 기초하여 상기 세그먼트 길이를 정의하는 단계를 더 포함한다.
예 12는 예 10 및 11 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계는 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 단계를 포함한다.
예 13은 예 10-12 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼는 복수의 데이터 워드를 포함하고, 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 단계는 상기 데이터 버퍼 내의 각각의 데이터 워드를 상이한 데이터 세그먼트에 할당하여 각각의 데이터 세그먼트가 데이터 워드들의 어레이를 포함하게 하는 단계를 포함한다.
예 14는 예 10-13 중 어느 하나의 내용을 포함하고, 각각의 결과는 복수의 데이터 워드를 포함하고, 상기 방법은 상기 결과들을 상기 데이터 워드들에 의해 인터리빙하는 단계를 더 포함한다.
예 15는 예 10-14 중 어느 하나의 내용을 포함하고, 직렬 데이터 처리 알고리즘을 실행하는 단계는 암호 해시 함수를 실행하는 단계를 포함한다.
예 16은 예 10-15 중 어느 하나의 내용을 포함하고, 상기 패딩된 데이터 세그먼트들 각각에 대한 해시 다이제스트를 생성하는 단계를 더 포함한다.
예 17은 예 10-16 중 어느 하나의 내용을 포함하고, 상기 해시 다이제스트들을 결합하여 새로운 데이터 버퍼를 형성하고, 상기 새로운 데이터 버퍼에 대해 상기 암호 해시 함수를 실행하는 단계를 더 포함한다.
예 18은 예 10-17 중 어느 하나의 내용을 포함하고, 상기 결합은 상기 결과들을 연결하고, 상기 연결된 결과들에 대해 상기 직렬 데이터 처리 알고리즘을 실행하는 단계를 포함한다.
예 19는 예 10-18 중 어느 하나의 내용을 포함하고, 상기 직렬 데이터 처리 알고리즘과 관련된 블록 크기를 결정하고, 상기 데이터 세그먼트들 각각을 패딩하여, 상기 패딩된 데이터 세그먼트들 각각의 길이가 상기 블록 크기의 배수가 되게 하는 단계를 더 포함한다.
예 20은 예 10-19 중 어느 하나의 내용을 포함하고, 상기 데이터 세그먼트들 각각에 데이터 비트들의 고정 패턴을 첨부하는 단계를 더 포함한다.
예 21은 예 10-20 중 어느 하나의 내용을 포함하고, 상기 컴퓨팅 장치의 마이크로프로세서의 특성에 기초하여 데이터 세그먼트들의 수를 결정하는 단계를 더 포함한다.
예 22는 예 10-21 중 어느 하나의 내용을 포함하고, 상기 직렬 데이터 처리 알고리즘의 특성에 기초하여 데이터 세그먼트들의 수를 결정하는 단계를 더 포함한다.
예 23은 컴퓨팅 장치로서, 프로세서, 및 상기 프로세서에 의해 실행될 때 상기 컴퓨팅 장치로 하여금 예 10-22 중 어느 하나의 방법을 수행하게 하는 복수의 명령어를 저장한 메모리를 포함하는 컴퓨팅 장치를 포함한다.
예 24는 실행되는 것에 응답하여 컴퓨팅 장치로 하여금 예 10-22 중 어느 하나의 방법을 수행하게 하는 저장된 복수의 명령어를 포함하는 하나 이상의 기계 판독 저장 매체를 포함한다.
예 25는 실행되는 것에 응답하여 컴퓨팅 장치로 하여금 데이터 버퍼를 복수의 데이터 세그먼트로 분할하고 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 가짐 -; 직렬 데이터 처리 알고리즘에 따라 각각의 데이터 세그먼트를 패딩하고; 각각의 데이터 세그먼트를 상기 컴퓨팅 장치의 데이터 레지스터의 상이한 데이터 경로 실행 유닛 내로 직접 입력하고; 상기 데이터 경로 실행 유닛들 각각에 대해 암호 해시 알고리즘을 실질적으로 병렬로 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하게 하는 저장된 복수의 명령어를 포함하는 하나 이상의 기계 판독 가능 저장 매체를 포함한다.
예 26은 예 25의 내용을 포함하고, 상기 데이터 경로 실행 유닛들에서 생성된 상기 결과들을 결합하는 것을 더 포함한다.
예 27은 예 25 또는 예 26의 내용을 포함하고, 상기 결합된 결과들에 대해 상기 암호 해시 알고리즘을 실행하는 것을 더 포함한다.
예 28은 예 25-27 중 어느 하나의 내용을 포함하고, 상기 암호 해시 알고리즘은 보안 해시 알고리즘 또는 MD5 알고리즘을 포함한다.
예 29는 예 25-28 중 어느 하나의 내용을 포함하고, 상기 데이터 레지스터의 폭 및 상기 암호 해시 알고리즘에 의해 지정된 워드 크기에 기초하여 상기 세그먼트 길이를 정의하는 것을 더 포함한다.
예 30은 예 25-29 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 것은 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 것을 포함한다.
예 31은 예 25-30 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼는 복수의 데이터 워드를 포함하고, 각각의 데이터 워드는 복수의 데이터 비트를 포함하고, 상기 데이터 버퍼를 상기 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 것은 상기 데이터 버퍼 내의 각각의 데이터 워드를 상이한 데이터 세그먼트에 할당하여 각각의 데이터 세그먼트가 데이터 워드들의 어레이를 포함하게 하는 것을 포함한다.
예 32는 예 25-31 중 어느 하나의 내용을 포함하고, 각각의 결과는 복수의 데이터 워드를 포함하고, 상기 방법은 상기 결과들을 상기 데이터 워드들에 의해 인터리빙하는 단계를 포함한다.
예 33은 예 25-32 중 어느 하나의 내용을 포함하고, 상기 컴퓨팅 장치의 마이크로프로세서의 특성 및 상기 암호 해시 알고리즘의 특성 중 하나 이상에 기초하여 데이터 세그먼트들의 수를 결정하는 것을 더 포함한다.

Claims (25)

  1. 데이터 버퍼를 처리하기 위한 컴퓨팅 장치로서,
    데이터 버퍼 처리 모듈
    을 포함하고,
    상기 데이터 버퍼 처리 모듈은,
    버퍼 길이 및 복수의 데이터 세그먼트를 갖는 임의 길이 데이터 버퍼에 액세스하고 - 각각의 데이터 세그먼트는 0보다 크고 상기 버퍼 길이보다 작은 세그먼트 길이를 가짐 -;
    직렬 데이터 처리 알고리즘에 따라 각각의 데이터 세그먼트를 패딩하고;
    상기 패딩된 데이터 세그먼트들 각각을 데이터 레지스터 내로 직접 입력(read into)하고 - 상기 데이터 레지스터는 복수의 데이터 경로를 갖고, 각각의 패딩된 데이터 세그먼트는 상이한 데이터 경로 내로 직접 입력됨 -;
    상기 데이터 경로들 각각에 대해 직렬 데이터 처리 알고리즘을 실질적으로 병렬로 수행하여 각각의 데이터 경로에 대한 결과를 생성하기 위한 것인 컴퓨팅 장치.
  2. 제1항에 있어서,
    상기 데이터 버퍼는 임의의 길이를 갖는 컴퓨팅 장치.
  3. 제1항 또는 제2항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 패딩된 데이터 세그먼트들 각각을 상기 데이터 레지스터의 상이한 데이터 경로 내로 직접 입력하기 위한 데이터 버퍼 처리 모듈을 포함하는 컴퓨팅 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 직렬 데이터 처리 알고리즘에 따라 상기 데이터 세그먼트들 각각을 패딩하기 위한 데이터 버퍼 처리 모듈을 포함하는 컴퓨팅 장치.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 데이터 버퍼 처리 모듈은 암호 해시 알고리즘에 대한 확장으로서 구현되는 컴퓨팅 장치.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 컴퓨팅 장치의 마이크로프로세서의 단일 코어 상에서 실행하기 위한 데이터 버퍼 처리 모듈을 포함하는 컴퓨팅 장치.
  7. 제6항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 단일 코어의 단일 스레드 상에서 실행하기 위한 데이터 버퍼 처리 모듈을 포함하는 컴퓨팅 장치.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 컴퓨팅 장치의 단일 명령어 다중 데이터 가능 프로세서(single instruction, multiple data-capable processor) 상에서 실행하기 위한 데이터 버퍼 처리 모듈을 포함하는 컴퓨팅 장치.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서,
    상기 데이터 버퍼 처리 모듈은 단일 스레드 소프트웨어 애플리케이션과 함께 실행하기 위한 데이터 버퍼 처리 모듈을 포함하는 컴퓨팅 장치.
  10. 복수의 명령어가 저장된 하나 이상의 기계 판독 가능 저장 매체로서,
    상기 복수의 명령어는, 실행되는 것에 응답하여, 컴퓨팅 장치로 하여금,
    상기 컴퓨팅 장치의 임의 길이 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하게 하고 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 가짐 -;
    직렬 데이터 처리 알고리즘에 따라 각각의 데이터 세그먼트를 패딩하게 하고;
    상기 패딩된 데이터 세그먼트들을 데이터 레지스터 내로 스트리밍하게 하고 - 상기 데이터 레지스터는 복수의 데이터 경로 실행 유닛을 갖고, 각각의 패딩된 데이터 세그먼트는 단일 데이터 포인터를 이용하여 상이한 데이터 경로 실행 유닛 내로 스트리밍됨 -;
    상기 데이터 경로 실행 유닛들 각각에서 직렬 데이터 처리 알고리즘을 실질적으로 병렬로 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하게 하는 기계 판독 가능 저장 매체.
  11. 제10항에 있어서,
    상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 데이터 레지스터의 폭 및 상기 직렬 데이터 처리 알고리즘에 의해 지정된 워드 크기에 기초하여 상기 세그먼트 길이를 정의하게 하는 기계 판독 가능 저장 매체.
  12. 제10항 또는 제11항에 있어서,
    상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하게 하는 것은 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하게 하는 것을 포함하는 기계 판독 가능 저장 매체.
  13. 제12항에 있어서,
    상기 데이터 버퍼는 복수의 데이터 워드를 포함하고, 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하게 하는 것은 상기 데이터 버퍼 내의 각각의 데이터 워드를 상이한 데이터 세그먼트에 할당하여 각각의 데이터 세그먼트가 데이터 워드들의 어레이를 포함하게 하는 것을 포함하는 기계 판독 가능 저장 매체.
  14. 제10항 내지 제13항 중 어느 한 항에 있어서,
    각각의 결과는 복수의 데이터 워드를 포함하고, 상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 결과들을 상기 데이터 워드들에 의해 인터리빙하게 하는 기계 판독 가능 저장 매체.
  15. 제10항 내지 제14항 중 어느 한 항에 있어서,
    직렬 데이터 처리 알고리즘을 실행하게 하는 것은 암호 해시 함수를 실행하게 하는 것을 포함하는 기계 판독 가능 저장 매체.
  16. 제15항에 있어서,
    상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 패딩된 데이터 세그먼트들 각각에 대한 해시 다이제스트를 생성하게 하는 기계 판독 가능 저장 매체.
  17. 제16항에 있어서,
    상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 해시 다이제스트들을 결합하여 새로운 데이터 버퍼를 형성하게 하고, 상기 새로운 데이터 버퍼에 대해 상기 암호 해시 함수를 실행하게 하는 기계 판독 가능 저장 매체.
  18. 제17항에 있어서,
    상기 해시 다이제스트들을 결합하는 것은 상기 결과들을 연결하고, 상기 연결된 결과들에 대해 상기 직렬 데이터 처리 알고리즘을 실행하는 것을 포함하는 기계 판독 가능 저장 매체.
  19. 제10항 내지 제18항 중 어느 한 항에 있어서,
    상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 직렬 데이터 처리 알고리즘과 관련된 블록 크기를 결정하게 하고, 상기 데이터 세그먼트들 각각을 패딩하여 상기 패딩된 데이터 세그먼트들 각각의 길이가 상기 블록 크기의 배수가 되게 하게 하는 기계 판독 가능 저장 매체.
  20. 제19항에 있어서,
    상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 데이터 세그먼트들 각각에 데이터 비트들의 고정 패턴을 첨부하게 하는 기계 판독 가능 저장 매체.
  21. 제10항 내지 제20항 중 어느 한 항에 있어서,
    상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 컴퓨팅 장치의 마이크로프로세서의 특성에 기초하여 데이터 세그먼트들의 수를 결정하게 하는 기계 판독 가능 저장 매체.
  22. 제10항 내지 제21항 중 어느 한 항에 있어서,
    상기 복수의 명령어는 또한 상기 컴퓨팅 장치로 하여금 상기 직렬 데이터 처리 알고리즘의 특성에 기초하여 데이터 세그먼트들의 수를 결정하게 하는 기계 판독 가능 저장 매체.
  23. 임의 길이 데이터 버퍼를 처리하기 위한 방법으로서,
    상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 가짐 -;
    직렬 데이터 처리 알고리즘에 따라 각각의 데이터 세그먼트를 패딩하는 단계;
    상기 패딩된 데이터 세그먼트들을 데이터 레지스터 내로 스트리밍하는 단계 - 상기 데이터 레지스터는 복수의 데이터 경로 실행 유닛을 갖고, 각각의 패딩된 데이터 세그먼트는 단일 데이터 포인터를 이용하여 상이한 데이터 경로 실행 유닛 내로 스트리밍됨 -; 및
    상기 데이터 경로 실행 유닛들 각각에서 직렬 데이터 처리 알고리즘을 실질적으로 병렬로 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하는 단계
    를 포함하는 방법.
  24. 제23항에 있어서,
    상기 데이터 버퍼는 복수의 데이터 워드를 포함하며,
    상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계는 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 단계를 포함하고,
    상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 단계는, 각각의 데이터 세그먼트가 데이터 워드들의 어레이를 포함하도록, 상기 데이터 버퍼 내의 각각의 데이터 워드를 상이한 데이터 세그먼트에 할당하는 단계를 포함하는 방법.
  25. 제23항 또는 제24항에 있어서,
    패딩된 데이터 세그먼트들 각각의 길이가 블록 크기의 배수가 되도록, 상기 직렬 데이터 처리 알고리즘과 관련된 블록 크기를 결정하고 상기 데이터 세그먼트들 각각을 패딩하는 단계를 더 포함하는 방법.
KR1020147034841A 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리 KR20150008483A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201261670472P 2012-07-11 2012-07-11
US61/670,472 2012-07-11
US13/631,763 2012-09-28
US13/631,763 US10203934B2 (en) 2012-07-11 2012-09-28 Parallell processing of a single data buffer
PCT/US2013/049887 WO2014011743A1 (en) 2012-07-11 2013-07-10 Parallel processing of a single data buffer

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020167023749A Division KR101753548B1 (ko) 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리

Publications (1)

Publication Number Publication Date
KR20150008483A true KR20150008483A (ko) 2015-01-22

Family

ID=49915004

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020167023749A KR101753548B1 (ko) 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리
KR1020147034841A KR20150008483A (ko) 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리
KR1020147034829A KR101755541B1 (ko) 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020167023749A KR101753548B1 (ko) 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020147034829A KR101755541B1 (ko) 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리

Country Status (6)

Country Link
US (2) US10203934B2 (ko)
EP (2) EP2872987B1 (ko)
JP (2) JP5981030B2 (ko)
KR (3) KR101753548B1 (ko)
CN (2) CN104364757B (ko)
WO (2) WO2014011746A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190059189A (ko) * 2017-11-22 2019-05-30 한국전자통신연구원 병렬 처리를 위한 데이터 생성 장치

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9501448B2 (en) 2008-05-27 2016-11-22 Stillwater Supercomputing, Inc. Execution engine for executing single assignment programs with affine dependencies
US10203934B2 (en) 2012-07-11 2019-02-12 Intel Corporation Parallell processing of a single data buffer
JP6183374B2 (ja) * 2012-10-31 2017-08-23 日本電気株式会社 データ処理システム、データ処理方法およびプログラム
US8924741B2 (en) 2012-12-29 2014-12-30 Intel Corporation Instruction and logic to provide SIMD secure hashing round slice functionality
US10038550B2 (en) 2013-08-08 2018-07-31 Intel Corporation Instruction and logic to provide a secure cipher hash round functionality
US9425953B2 (en) 2013-10-09 2016-08-23 Intel Corporation Generating multiple secure hashes from a single data buffer
US10503510B2 (en) 2013-12-27 2019-12-10 Intel Corporation SM3 hash function message expansion processors, methods, systems, and instructions
WO2015126495A2 (en) * 2014-02-20 2015-08-27 Stillwater Supercomputing, Inc. Execution engine for executing single assignment programs with affine dependencies
US9912481B2 (en) * 2014-03-27 2018-03-06 Intel Corporation Method and apparatus for efficiently executing hash operations
US9317719B2 (en) 2014-09-04 2016-04-19 Intel Corporation SM3 hash algorithm acceleration processors, methods, systems, and instructions
US9658854B2 (en) 2014-09-26 2017-05-23 Intel Corporation Instructions and logic to provide SIMD SM3 cryptographic hashing functionality
CN106375243B (zh) * 2015-07-22 2019-09-03 华为技术有限公司 数据处理设备和光传送网络交换机
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
WO2017095435A1 (en) 2015-12-04 2017-06-08 Hewlett Packard Enterprise Development Lp Combining hashes of data blocks
CN114168525B (zh) * 2017-03-14 2023-12-19 珠海市芯动力科技有限公司 可重构并行处理
GB2564878B (en) * 2017-07-25 2020-02-26 Advanced Risc Mach Ltd Parallel processing of fetch blocks of data
CN107888657B (zh) * 2017-10-11 2020-11-06 上海交通大学 低延迟分布式存储系统
US10725789B2 (en) 2017-11-22 2020-07-28 Electronics And Telecommunications Research Institute Data generation device for parallel processing
CN108549583B (zh) * 2018-04-17 2021-05-07 致云科技有限公司 大数据处理方法、装置、服务器及可读存储介质
CN108984470A (zh) * 2018-06-19 2018-12-11 四川斐讯信息技术有限公司 一种fpga矿机算力的提升系统及方法
CN112148391A (zh) * 2019-06-26 2020-12-29 北京百度网讯科技有限公司 生成基于芯片的计算功能的方法、装置、设备和存储介质
CN112104449B (zh) * 2020-08-20 2022-02-11 郑州信大捷安信息技术股份有限公司 一种用于哈希算法的sdk
CN114912405A (zh) * 2021-02-08 2022-08-16 深圳比特微电子科技有限公司 采用全定制布局摆放的芯片以及用于实现挖矿算法的电子装置

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6018778A (en) 1996-05-03 2000-01-25 Netcell Corporation Disk array controller for reading/writing striped data using a single address counter for synchronously transferring data between data ports and buffer memory
US20070294510A1 (en) 1999-04-09 2007-12-20 Dave Stuttard Parallel data processing apparatus
DE19957594B4 (de) 1999-11-30 2004-08-26 OCé PRINTING SYSTEMS GMBH Verfahren zum Synchronisieren von threads eines Computerprogramms
WO2001056221A2 (en) 2000-01-31 2001-08-02 Vdg Inc. Block encryption method and schemes for data confidentiality and integrity protection
CA2343437A1 (en) 2001-04-06 2002-10-06 Ibm Canada Limited-Ibm Canada Limitee Method and system for cross platform, parallel processing
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
US8140824B2 (en) 2002-11-21 2012-03-20 International Business Machines Corporation Secure code authentication
US7552419B2 (en) 2004-03-18 2009-06-23 Intel Corporation Sharing trusted hardware across multiple operational environments
US7734674B2 (en) 2005-08-08 2010-06-08 Freescale Semiconductor, Inc. Fast fourier transform (FFT) architecture in a multi-mode wireless processing system
US8055970B1 (en) * 2005-11-14 2011-11-08 Raytheon Company System and method for parallel processing of data integrity algorithms
US20080010463A1 (en) * 2006-07-10 2008-01-10 Motorola, Inc. Method for producing truncated message digests
US8122247B2 (en) 2006-10-23 2012-02-21 Alcatel Lucent Processing method for message integrity with tolerance for non-sequential arrival of message data
KR101088549B1 (ko) 2006-11-21 2011-12-05 알카텔-루센트 유에스에이 인코포레이티드 송신용 애플리케이션 패킷 처리 방법과 수신된 애플리케이션 패킷 세그먼트 처리 방법
CN101304473B (zh) 2008-06-20 2010-09-08 中山大学 一种基于散列表的双向机顶盒会话信息维护方法
US8788841B2 (en) 2008-10-23 2014-07-22 Samsung Electronics Co., Ltd. Representation and verification of data for safe computing environments and systems
US8493979B2 (en) * 2008-12-30 2013-07-23 Intel Corporation Single instruction processing of network packets
US8832464B2 (en) * 2009-03-31 2014-09-09 Oracle America, Inc. Processor and method for implementing instruction support for hash algorithms
US8996556B2 (en) 2009-06-05 2015-03-31 Microsoft Technology Licensing, Llc Parallel processing of an ordered data stream
JP2011081594A (ja) 2009-10-07 2011-04-21 Mitsubishi Electric Corp データ処理装置及びデータ処理プログラム
US8443343B2 (en) 2009-10-28 2013-05-14 Intel Corporation Context-sensitive slicing for dynamically parallelizing binary programs
US8467532B2 (en) 2010-01-04 2013-06-18 Tata Consultancy Services Limited System and method for secure transaction of data between a wireless communication device and a server
US8842833B2 (en) 2010-07-09 2014-09-23 Tata Consultancy Services Limited System and method for secure transaction of data between wireless communication device and server
US8566841B2 (en) 2010-11-10 2013-10-22 International Business Machines Corporation Processing communications events in parallel active messaging interface by awakening thread from wait state
US8856546B2 (en) * 2012-06-07 2014-10-07 Intel Corporation Speed up secure hash algorithm (SHA) using single instruction multiple data (SIMD) architectures
US10203934B2 (en) 2012-07-11 2019-02-12 Intel Corporation Parallell processing of a single data buffer

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190059189A (ko) * 2017-11-22 2019-05-30 한국전자통신연구원 병렬 처리를 위한 데이터 생성 장치

Also Published As

Publication number Publication date
WO2014011746A1 (en) 2014-01-16
US20140019694A1 (en) 2014-01-16
WO2014011743A1 (en) 2014-01-16
JP5981030B2 (ja) 2016-08-31
CN104364757A (zh) 2015-02-18
US10198248B2 (en) 2019-02-05
KR20150008185A (ko) 2015-01-21
EP2872990B1 (en) 2019-10-09
EP2872990A4 (en) 2016-03-02
EP2872987A1 (en) 2015-05-20
KR101755541B1 (ko) 2017-07-07
KR20160105988A (ko) 2016-09-08
KR101753548B1 (ko) 2017-07-03
JP6141421B2 (ja) 2017-06-07
CN104364756A (zh) 2015-02-18
CN104364756B (zh) 2019-05-14
EP2872990A1 (en) 2015-05-20
JP2015523596A (ja) 2015-08-13
US10203934B2 (en) 2019-02-12
US20140019693A1 (en) 2014-01-16
CN104364757B (zh) 2020-08-11
EP2872987B1 (en) 2019-10-16
EP2872987A4 (en) 2016-02-24
JP2015529865A (ja) 2015-10-08

Similar Documents

Publication Publication Date Title
KR101753548B1 (ko) 단일 데이터 버퍼의 병렬 처리
US11681529B2 (en) Apparatuses, methods, and systems for access synchronization in a shared memory
EP3055809B1 (en) Generating multiple secure hashes from a single data buffer
BR102020019657A2 (pt) aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz
KR20170097008A (ko) 벡터 요소 세트에 대해 축소 연산을 수행하기 위한 방법 및 장치
CN110968348A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
CN107924307B (zh) 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN107257955B (zh) 快速向量动态存储器冲突检测
WO2013095609A1 (en) Systems, apparatuses, and methods for performing conversion of a mask register into a vector register
CN114546490A (zh) 用于散列指令的装置、方法和系统
CN116860334A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN111831334A (zh) 经改进的插入指令的装置和方法
WO2017112498A1 (en) Apparatus and method for enforcement of reserved bits
US20200266995A1 (en) Managing state in accelerators
EP3757822B1 (en) Apparatuses, methods, and systems for enhanced matrix multiplier architecture
CN114064122A (zh) 指令处理方法、装置、设备及存储介质
CN113849768A (zh) 伴随数据类型转换来加载和存储矩阵数据
Lowden et al. Design and performance analysis of efficient KECCAK tree hashing on GPU architectures
Fan et al. Multi-core and SIMD architecture based implementation on SHA-256 of Blockchain
CN111755043A (zh) 数组广播和约简系统和方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
A107 Divisional application of patent