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

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

Info

Publication number
KR101755541B1
KR101755541B1 KR1020147034829A KR20147034829A KR101755541B1 KR 101755541 B1 KR101755541 B1 KR 101755541B1 KR 1020147034829 A KR1020147034829 A KR 1020147034829A KR 20147034829 A KR20147034829 A KR 20147034829A KR 101755541 B1 KR101755541 B1 KR 101755541B1
Authority
KR
South Korea
Prior art keywords
data
buffer
algorithm
segments
registers
Prior art date
Application number
KR1020147034829A
Other languages
English (en)
Other versions
KR20150008185A (ko
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 KR20150008185A publication Critical patent/KR20150008185A/ko
Application granted granted Critical
Publication of KR101755541B1 publication Critical patent/KR101755541B1/ko

Links

Images

Classifications

    • 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
    • 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
    • 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

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,761호에 대한 우선권을 주장한다.
데이터 파일들 및 컴퓨터 프로그램들의 보안을 검증하기 위한 소프트웨어는 운영 체제 부트 시퀀스, 프로그램 코드 또는 데이터 파일의 로딩, 웹 브라우징, 데이터 통신 및 데이터 저장과 같은 많은 상이한 상황들에서 널리 퍼져있다. 인증 및/또는 암호화를 위해 사용되는 것들과 같은 직렬 데이터 처리 알고리즘들은 단일 데이터 버퍼에 대해 연쇄 종속 방식으로 동작할 수 있다. 그러한 알고리즘들은 버퍼 내의 데이터의 1개 블록의 처리로부터 발생하는 출력이 후속 블록의 처리를 위해 종종 필요하다는 점에서 직렬 연쇄에 의해 제한될 수 있다.
예를 들어, MD5(메시지-다이제스트 알고리즘) 및 SHA1, SHA256 및 SHA512(보안 해시 알고리즘들)와 같은 암호 해시 함수들은 범용 프로세서들 상에서의 계산과 관련하여 비용이 많이 들 수 있다. 그러한 해시 함수들은 단일 데이터 버퍼들에 대해 순차적으로 작용하여, 각각의 데이터 블록으로부터 도출된 계산들을 이용하여 그리고 서로 의존하는 다수의 처리 라운드를 이용하여 해시 다이제스트 상태를 갱신한다. 단일 버퍼의 블록들의 순차적 처리는 현대의 프로세서들의 성능을 제한한다. 벡터 단일 명령 다중 데이터(SIMD) 유닛들을 이용하는 다중 버퍼 처리와 같은 방법들이 다수의 독립 데이터 버퍼에 대해 작용하는 것이 가능한 응용들에서의 보다 양호한 성능을 위해 제안되었지만, 그러한 방법들은 단일 버퍼의 해싱을 수반하는 응용들에는 적용할 수 없다. 다수의 코어 또는 엔진에 걸치는 것이지만, 또 하나의 사용되어온 기술은 트리 해싱이다.
본 명세서에서 설명되는 개념들은 첨부 도면들에 한정이 아니라 예시적으로 도시된다. 도시의 간명화를 위해, 도면들에 도시된 요소들은 반드시 축척으로 도시된 것은 아니다. 예를 들어, 일부 요소들의 치수들은 명료화를 위해 다른 요소들에 비해 과장될 수 있다. 또한, 적절한 것으로 간주되는 경우에는 대응하거나 유사한 요소들을 지시하기 위해 도면들 사이에서 참조 부호들이 반복되었다.
도 1은 개시되는 방법들을 구현할 수 있는 컴퓨팅 장치의 적어도 일 실시예의 간이 블록도이다.
도 2는 단일 데이터 버퍼의 병렬 처리를 위한 시스템의 적어도 일 실시예의 간이 모듈도이다.
도 3은 단일 데이터 버퍼의 병렬 처리를 위한 방법의 적어도 일 실시예의 간이 흐름도이다.
도 4는 단일 데이터 버퍼의 병렬 처리의 적어도 일 실시예의 간이 예이다.
도 5는 단일 데이터 버퍼의 병렬 처리의 결과의 적어도 일 실시예의 간이 예이다.
본 발명의 개념들은 다양한 변경들 및 대안 형태들이 가능하지만, 본 발명의 특정 실시예들이 도면들에 예시적으로 도시되었으며, 본 명세서에서 상세히 설명될 것이다. 그러나, 본 발명의 개념들을 개시되는 특정 형태들로 한정하는 것을 의도하지 않으며, 본 명세서 및 첨부된 청구항들과 일치하는 모든 변경들, 균등물들 및 대안들을 포함하는 것을 의도한다는 것을 이해해야 한다.
아래의 설명에서는, 본 발명의 더 충분한 이해를 제공하기 위해, 논리 구현, 연산 코드, 피연산자를 지정하기 위한 수단, 자원 분할/공유/복제 구현, 시스템 컴포넌트의 타입 및 상호 관계 및 논리 분할/통합 선택과 같은 다양한 특정 상세들이 설명된다. 그러나, 이 분야의 기술자는 본 발명의 실시예들이 그러한 특정 상세 없이도 실시될 수 있다는 것을 알 것이다. 다른 예들에서는 본 명세서에서 설명되는 개념들의 설명을 불명확하게 하지 않기 위해, 제어 구조, 게이트 레벨 회로 및 전체 소프트웨어 명령어 시퀀스는 상세히 설명되지 않았다. 이 분야의 통상의 기술자들은 포함된 설명을 이용하여 과도한 실험 없이 적절한 기능을 구현할 수 있을 것이다.
본 명세서에서 "하나의 실시예", "실시예", "예시적인 실시예" 등에 대한 참조들은 설명되는 실시예가 특정 특징, 구조 또는 특성을 포함할 수 있지만, 모든 실시예가 반드시 특정 특징, 구조 또는 특성을 포함하지는 않을 수 있다는 것을 지시한다. 더욱이, 그러한 표현들은 반드시 동일 실시예를 참조하지는 않는다. 또한, 특정 특징, 구조 또는 특성이 일 실시예와 관련하여 설명될 때, 명확히 설명되는지의 여부에 관계없이 다른 실시예들과 관련하여 그러한 특징, 구조 또는 특성을 실시하는 것은 이 분야의 기술자의 지식 내에 있다는 것을 진술한다.
본 명세서에서 설명되는 개념들의 실시예들은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의 조합에서 구현될 수 있다. 컴퓨터 시스템에서 구현되는 실시예들은 컴포넌트들 사이의 하나 이상의 점대점 또는 버스 기반 상호접속을 포함할 수 있다. 본 명세서에서 설명되는 개념들의 실시예들은, 하나 이상의 프로세서에 의해 판독 및 실행될 수 있는, 하나 이상의 기계 판독 가능 또는 컴퓨터 판독 가능 저장 매체에 의해 전달되거나 그에 저장되는 명령어들로서 구현될 수도 있다. 기계 판독 가능 또는 컴퓨터 판독 가능 저장 매체는 기계(예로서, 컴퓨팅 장치)에 의해 판독될 수 있는 형태로 정보를 저장 또는 전송하기 위한 임의의 장치, 메커니즘 또는 물리 구조로서 구현될 수 있다. 예를 들어, 기계 판독 가능 또는 컴퓨터 판독 가능 저장 매체는 판독 전용 메모리(ROM) 장치(들); 랜덤 액세스 메모리(RAM) 장치(들); 자기 디스크 저장 매체; 광학 저장 매체; 플래시 메모리 장치; 미니 또는 마이크로 SD 카드, 메모리 스틱 등으로서 구현될 수 있다.
도면들에서, 장치, 모듈, 명령어 블록 및 데이터 요소를 표현하는 것들과 같은 도해 요소들의 특정 배열들 또는 순서들은 설명의 편의를 위해 도시될 수 있다. 그러나, 이 분야의 기술자들은 도면들 내의 도해 요소들의 특정 순서 또는 배열이 처리의 특정 순서 또는 시퀀스 또는 프로세스들의 분리가 요구된다는 것을 암시하는 것을 의도하지 않는다는 것을 이해해야 한다. 또한, 도면 내의 도해 요소의 포함은 그러한 요소가 모든 실시예들에서 요구된다거나, 그러한 요소에 의해 표현되는 특징들이 일부 실시예들 내에 포함되지 않을 수 있거나 일부 실시예들 내의 다른 요소들과 결합되지 않을 수 있다는 것을 암시하는 것을 의도하지 않는다.
일반적으로, 명령어 블록들을 표현하는 데 사용되는 도해 요소들은 소프트웨어 또는 펌웨어 애플리케이션, 프로그램, 함수, 모듈, 루틴, 프로세스, 프로시저, 플러그-인, 애플릿, 위젯, 코드 프래그먼트 등과 같은 임의의 적절한 형태의 기계 판독 가능 명령어를 이용하여 구현될 수 있으며, 각각의 그러한 명령어는 임의의 적절한 프로그래밍 언어, 라이브러리, 애플리케이션 프로그래밍 인터페이스(API) 및/또는 다른 소프트웨어 개발 도구들을 이용하여 구현될 수 있다. 예를 들어, 일부 실시예들은 자바, C++ 및/또는 다른 프로그래밍 언어들을 이용하여 구현될 수 있다. 유사하게, 데이터 또는 정보를 표현하는 데 사용되는 도해 요소들은 레지스터, 데이터 스토어, 테이블, 레코드, 어레이, 인덱스, 해시, 맵, 트리, 리스트, 그래프, (임의의 파일 타입의) 파일, 폴더, 디렉토리, 데이터베이스 등과 같은 임의의 적절한 전자 배열 또는 구조를 이용하여 구현될 수 있다.
또한, 도면들에서, 실선 또는 점선 또는 화살표와 같은 접속 요소들이 둘 이상의 다른 도해 요소 간의 접속, 관계 또는 연관성을 나타내는 데 사용되는 경우에, 임의의 그러한 접속 요소들의 부재는 어떠한 접속, 관계 또는 연관성도 존재하지 않는다는 것을 암시하는 것을 의도하지 않는다. 즉, 요소들 간의 일부 접속들, 관계들 또는 연관성들은 본 발명을 불명확하게 하지 않기 위해 도면들에 도시되지 않을 수 있다. 게다가, 도시의 편의를 위해, 단일 접속 요소를 이용하여, 요소들 간의 다수의 접속, 관계 또는 연관성을 표현할 수 있다. 예컨대, 접속 요소가 신호들, 데이터 또는 명령어들의 통신을 표현하는 경우에, 이 분야의 기술자들은 그러한 요소가 통신을 실시하기 위해 필요할 수 있는 바에 따라 하나 또는 다수의 신호 경로(예로서, 버스)를 표현할 수 있다는 것을 이해해야 한다.
이제, 도 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) 각각은 다양한 실시예들에서 소프트웨어, 펌웨어, 하드웨어 및/또는 이들의 조합으로서 구현될 수 있다. 또한, 데이터 버퍼 처리 모듈(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)에 대한 병렬성의 레벨 또는 정도를 표현하는 양의 정수이다. 버퍼 처리 모듈(130)은 입력 데이터 버퍼(210)를 데이터 레지스터(118) 내로 스트리밍하며, 따라서 각각의 세그먼트가 레지스터(118)의 상이한 레인 또는 데이터 경로에 할당된다. 버퍼 처리 모듈(130)은 레지스터(118)의 각각의 레인 또는 데이터 경로에 대한 알고리즘(128)의 실행을 병렬로 개시하며, 따라서 입력 데이터 버퍼(210)의 각각의 세그먼트가 직렬 데이터 처리 알고리즘(128)에 의해 동시에 처리된다.
알고리즘(128)은 (예를 들어, 비트 또는 바이트 단위로 측정되는) 지정된 크기 B의 데이터 블록들에서 직렬로, 데이터 버퍼(210)의 세그먼트들 각각을 병렬로 처리하며, 각각의 데이터 블록은 (예를 들어, 비트 또는 바이트 단위로 측정되는) 크기 W의 다수의 데이터 워드로 구성되고, 따라서 B는 W의 배수이다. 알고리즘(128)은 (예를 들어, 비트 또는 바이트 단위로 측정되는) 고정 길이 D를 갖는 출력 데이터 버퍼(또는 일부 실시예들에서 "메시지 다이제스트" 또는 "해시 다이제스트")(212)를 생성한다. 입력 데이터 버퍼(210) 및 출력 데이터 버퍼(212) 양자는 예시적인 실시예들에서 단일 데이터 버퍼(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)의 임의의 필요한 전처리를 수행한다. 예를 들어, 암호 해시 함수들의 경우, 입력 데이터 버퍼(210)는 입력 데이터 버퍼(210)가 (해시 알고리즘 표준들 또는 사양들에 의해 통상적으로 지정되는) 원하는 길이를 가질 때까지 메시지의 끝에 다수의 데이터 비트를 (예를 들어, 연결에 의해) 첨부함으로써 패딩된다. 일부 실시예들에서, 패딩은 "1" 비트에 이어지는 필요한 수의 "0" 비트를 포함한다. 다른 실시예들에서는 패딩에서 "0" 및 "1" 비트들의 다른 조합들 또는 패턴들이 사용될 수 있다. 기본 알고리즘(128)을 정의하는 표준들 또는 사양들은 패딩 스킴을 지정한다. 일부 실시예들에서, 버퍼(210)는 패딩된 버퍼가 블록 크기의 최소 배수가 되게 하기에 충분한 다수의 비트에 의해 확장된다. 블록 310에서 입력 데이터 버퍼(210)를 전처리하기 위한 일부 기술들은 (1) 버퍼(210)의 전체 길이가 B*S의 배수가 될 때까지 길이로 연결되는 고정 비트 패턴을 이용하여 버퍼를 패딩하는 기술을 포함한다. 이것은 S-웨이(S-way) SIMD 처리를 이용하여 버퍼를 효율적으로 처리함으로써 S 다이제스트들을 생성하는 것을 가능하게 한다. 이어서, 다이제스트들의 세트는 길이 S*D의 다른 데이터 버퍼로서 취급될 수 있고, 이어서 크기 D의 최종 해시가 생성될 수 있으며, (2) B*S의 배수의 길이를 갖는 버퍼(210)의 최대 영역을 병렬로 선택하며, 따라서 S 다이제스트들이 생성될 수 있다. 이어서, 다이제스트들의 세트는 새로운 데이터 버퍼로서 버퍼의 나머지와 연결될 수 있으며, 이어서 크기 D의 최종 해시가 생성될 수 있다.
블록 312에서, 방법(300)은 입력 데이터 버퍼(210)를 분할할 세그먼트들의 수(S)를 결정하고, 입력 버퍼(210)에 걸쳐 사전 결정된 수의 세그먼트를 생성한다. 일부 실시예들에서, 세그먼트들의 수는 사전 결정될 수 있고, (예를 들어, 탐색표 또는 데이터베이스로부터) 파라미터, 독립변수 또는 저장된 값으로서 간단히 액세스될 수 있다. 다른 실시예들에서, 세그먼트들의 수는 로드 시간 또는 실행 시간에 결정될 수 있다. 일부 실시예들에서, 세그먼트들의 수는 레지스터(118)의 폭, 직렬 데이터 처리 알고리즘(128)의 파라미터들 또는 사양들(예로서, 블록 크기, 워드 크기, 출력 길이 등) 및/또는 입력 데이터 버퍼(210)의 길이의 함수일 수 있다. 일례로서, SHA256 해시 함수가 알고리즘(128)으로서 사용되는 경우, S=8, W=4 바이트 및 B=64 바이트이다. 다른 예로서, 128 비트 레지스터들을 갖는 SIMD 가능 마이크로프로세서 상에서 SHA-1을 실행하는 것은 다음의 파라미터 설정들, 즉 B=64 바이트, W=4 바이트, S=4, D=20 바이트를 가질 것이다.
여전히, 블록 312에서, 세그먼트들 각각은 특정 폭(예로서, 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보다 작다. 버퍼 길이 L은 L=SB*N + L mod SB로서 표현될 수 있으며, 세그먼트 길이 SL은 SL=B*N으로 표현될 수 있다.
블록 314에서, 방법(300)은 세그먼트들을 레지스터(118)의 데이터 경로들 내로 스트리밍하거나 직접 입력(read into)하며, 따라서 각각의 세그먼트는 (예를 들어, 인터리빙을 이용하여) 상이한 데이터 경로 내로 입력된다. 일부 실시예들에서, 이것은 SB까지, 즉 균일한 크기의 세그먼트들 모두가 처리될 때까지 증가되는 단일 데이터 포인터를 이용하여 달성된다. SHA256 예에서는, 한꺼번에 8개의 32비트 워드가 레지스터의 8개의 데이터 경로 내로 입력된다.
블록 316에서, 직렬 데이터 처리 알고리즘(128)이 데이터 세그먼트들 각각에 대해 병렬로 실행된다. 즉, 각각의 세그먼트에 대해, 알고리즘(128)은 그 세그먼트의 블록들을 순차적으로 처리하는 동시에, 알고리즘(128)은 다른 세그먼트들을 유사하게 처리한다. 따라서, 각각의 세그먼트에 대해 중간 결과(예로서, 해시 다이제스트)가 생성된다. 알고리즘(128)은 또한 (존재하는 경우에) 입력 데이터 버퍼(210)의 나머지 부분에 대해 실행되며, 대응하는 중간 결과가 생성된다. SHA256 예에서, SHA256 알고리즘은 각각의 데이터 경로/32비트 워드에 대해 실질적으로 동시에 실행되고, 이어서 다음 8개의 워드가 레지스터 데이터 경로들 내로 입력되고, SHA256 알고리즘에 의해 병렬로 처리되는 등, 블록 크기 B까지 처리된다.
블록 318에서, 중간 결과들 모두를 결합하여 알고리즘(128)의 최종 출력(예로서, 해시 다이제스트)을 생성한다. 중간 결과들은 배타적 논리합(XOR) 또는 가산(ADD) 함수의 이용 또는 중간 결과들을 연결한 후에 알고리즘(128)을 다시 실행하는 것을 포함하는 다수의 상이한 방식으로 결합될 수 있다. SHA256 예에서, 8개의 해시 다이제스트 각각은 하나의 256 비트 해시 다이제스트로 결합된다. 이 분야의 기술자들은 방법(300)이 다른 프로세서 구성들 또는 직렬 데이터 처리 알고리즘들에 쉽게 적응될 수 있다는 것을 알아야 한다. 예를 들어, 다른 레지스터 폭들을 갖는 레지스터들이 사용될 수 있다. 예를 들어, 512 비트의 폭을 갖는 AVX3을 이용하는 경우, 세그먼트들의 수(S)는 8개가 아니라 16개일 수 있으며, 각각의 세그먼트는 매 16개의 워드(32비트)로 구성될 수 있다.
방법(300)의 일부 실시예들은 단일 버퍼(210)를 인터리빙된 독립 버퍼들과 유사한 세그먼트들의 세트로서 취급하며, 그러한 세그먼트들에 대한 다수의 독립 해시 다이제스트를 병렬로 생성한다. 일부 실시예들에서, 인터리빙된 세그먼트들의 수는 2의 거듭제곱이다. 알고리즘(128)은 세그먼트들의 병렬 처리로부터의 중간 결과들을 처리하여 최종 결과를 형성한다. 일반적으로, 방법(300)의 일부 실시예들은 버퍼(210)를 블록 또는 더 큰 크기의 처리 부분들로 분할하는 것이 아니라 데이터를 더 미세한 입도로(예를 들어, 데이터 워드들로) 인터리빙한다.
이제, 도 3, 4 및 5를 참조하면, 방법(300)의 예시적인 실시예는 각각 크기 B 바이트의 정수 개의 블록에 대해 작용하도록 정의되는 해시 함수 H를 사용한다. 아래의 실시예는 주어진 레벨의 병렬성 S를 이용하여 길이 L의 메시지(M0)를 해싱한다(여기서,
Figure 112014120529176-pct00001
심벌은 연결을 나타낸다). 도 3의 블록 310을 참조하면, 메시지(M0)는 H와 관련된 패딩 함수에 따라 전처리된다. 패딩 함수는 PadH(메시지, 메시지 길이, 블록 크기 B)로서 표시되며, 사전 결정된 패턴 및 B 바이트의 배수인 최소 길이에 대한 메시지 길이의 연결을 이용하여 메시지를 확장한다. 패딩 함수 PadH(M0, L, B*S)는 메시지(M0)에 적용되어, 길이 L'의 M0'가 생성되며, 여기서 L'는 M0가 연장될 수 있는 최소 길이로서, B*S 바이트의 배수이다.
도 3의 블록 312를 참조하면, 블록 310으로부터의 패딩된 메시지(M0')는 각각 길이 L'/S의 S개의 세그먼트로 분할된다. 패딩된 메시지(M0')는 인터리빙 방식으로 분할되며, 따라서 M0'의 워드 크기 W 비트마다 상이한 세그먼트에 할당된다. 각각의 세그먼트는 W 비트 워드들의 어레이로서 표현된다.
Figure 112014120529176-pct00002
여기서, 각각의 M0'[n]은 패딩된 메시지 내로의 워드 크기 W 인덱스이다. 도 3의 블록 316을 참조하면, 세그먼트들에 대해 S개의 리프-레벨 다이제스트가 k=0...(S-1)에 대해 Dk=H(Segk)로서 생성된다. 도 3의 블록 318을 참조하면, 블록 316으로부터의 결과적인 다이제스트들을 워드 크기 W 비트마다 인터리빙함으로써 새로운 메시지(M1)가 생성된다.
Figure 112014120529176-pct00003
인 경우 - 여기서, 각각의 Dk[n]은 세그먼트의 다이제스트 내로의 워드 크기 W 인덱스임 -, 패딩된 M1'가 PadH(M1, S*D, B)로서 생성될 수 있다. 이어서, 해시 함수 H가 M1'에 적용될 수 있다(예로서, H(M1')).
일부 실시예들에서, 메모리 내에 정렬된 데이터 버퍼(210)의 내용들은 전치에 대한 필요 없이 SIMD 레지스터들 내로 직접 입력(예로서, "스트리밍")된다. 일부 실시예들에서, 방법(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은 임의 길이 데이터 버퍼를 처리하기 위한 방법을 포함한다. 상기 방법은 상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 가짐 -; 상기 데이터 세그먼트들을 데이터 레지스터 내로 스트리밍하는 단계 - 상기 데이터 레지스터는 복수의 데이터 경로 실행 유닛을 갖고, 각각의 데이터 세그먼트는 단일 데이터 포인터를 이용하여 상이한 데이터 경로 실행 유닛 내로 스트리밍됨 -; 상기 데이터 경로 실행 유닛들 각각에서 실질적으로 병렬로 직렬 데이터 처리 알고리즘을 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하는 단계; 및 상기 결과들을 결합하여 상기 직렬 데이터 처리 알고리즘의 출력을 형성하는 단계를 포함한다.
예 9는 예 8의 내용을 포함하고, 상기 데이터 레지스터의 폭 및 상기 직렬 데이터 처리 알고리즘에 의해 지정된 워드 크기에 기초하여 상기 세그먼트 길이를 정의하는 단계를 더 포함한다.
예 10은 예 8 및 9 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계는 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 단계를 포함한다.
예 11은 예 8-10 중 어느 하나의 내용을 포함하고, 상기 데이터 버퍼는 복수의 데이터 워드를 포함하고, 각각의 데이터 워드는 복수의 데이터 비트를 포함하고, 상기 방법은 상기 데이터 버퍼 내의 각각의 데이터 워드를 상이한 데이터 세그먼트에 할당하여 각각의 데이터 세그먼트가 데이터 워드들의 어레이를 포함하게 하는 단계를 포함한다.
예 12는 예 8-11 중 어느 하나의 내용을 포함하고, 각각의 결과는 복수의 데이터 워드를 포함하고, 각각의 데이터 워드는 복수의 데이터 비트를 포함하고, 상기 결합은 상기 결과들을 상기 데이터 워드들에 의해 인터리빙하는 단계를 포함한다.
예 13은 예 8-12 중 어느 하나의 내용을 포함하고, 직렬 데이터 처리 알고리즘을 실행하는 단계는 암호 해시 함수를 실행하는 단계를 포함한다.
예 14는 예 8-13 중 어느 하나의 내용을 포함하고, 각각의 데이터 세그먼트에 대한 해시 다이제스트를 생성하는 단계를 포함한다.
예 15는 예 8-14 중 어느 하나의 내용을 포함하고, 상기 해시 다이제스트들을 결합하여 새로운 데이터 버퍼를 형성하고 상기 새로운 데이터 버퍼에 대해 상기 암호 해시 함수를 실행하는 단계를 더 포함한다.
예 16은 예 8-15 중 어느 하나의 내용을 포함하고, 상기 버퍼의 길이가 상기 블록 크기의 배수이도록 상기 직렬 데이터 처리 알고리즘과 관련된 블록 크기를 결정하고 상기 데이터 버퍼를 패딩하는 단계를 더 포함한다.
예 17은 예 8-16 중 어느 하나의 내용을 포함하고, 상기 버퍼의 길이가 상기 블록 크기와 데이터 세그먼트들의 수를 곱한 값과 동일하도록 상기 데이터 버퍼에 데이터 비트들의 고정 패턴을 첨부하는 단계를 더 포함한다.
예 18은 예 8-17 중 어느 하나의 내용을 포함하고, 상기 결합은 상기 결과들을 연결하고, 상기 연결된 결과들에 대해 상기 직렬 데이터 처리 알고리즘을 실행하는 단계를 포함한다.
예 19는 예 8-18 중 어느 하나의 내용을 포함하고, 상기 컴퓨팅 장치의 마이크로프로세서의 특성에 기초하여 데이터 세그먼트들의 수를 결정하는 단계를 더 포함한다.
예 20은 예 8-19 중 어느 하나의 내용을 포함하고, 상기 직렬 데이터 처리 알고리즘의 특성에 기초하여 데이터 세그먼트들의 수를 결정하는 단계를 더 포함한다.
예 21은 컴퓨팅 장치로서, 프로세서, 및 상기 프로세서에 의해 실행될 때 상기 컴퓨팅 장치로 하여금 예 8-20 중 어느 하나의 방법을 수행하게 하는 복수의 명령어를 저장한 메모리를 포함하는 컴퓨팅 장치를 포함한다.
예 22는 실행되는 것에 응답하여 컴퓨팅 장치로 하여금 예 8-20 중 어느 하나의 방법을 수행하게 하는 저장된 복수의 명령어를 포함하는 하나 이상의 기계 판독 저장 매체를 포함한다.
예 23은 실행되는 것에 응답하여 컴퓨팅 장치로 하여금 데이터 버퍼를 복수의 데이터 세그먼트로 분할하고 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 가짐 -; 각각의 데이터 세그먼트를 상기 컴퓨팅 장치의 데이터 레지스터의 상이한 데이터 경로 실행 유닛 내로 직접 입력하고; 상기 데이터 경로 실행 유닛들 각각에 대해 실질적으로 병렬로 암호 해시 함수를 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하고; 상기 데이터 경로 실행 유닛들에서 생성된 상기 결과들을 연결하고; 상기 연결된 결과들에 대해 상기 암호 해시 함수를 실행하여 상기 암호 해시 함수의 출력을 생성하게 하는 저장된 복수의 명령어를 포함하는 하나 이상의 기계 판독 가능 저장 매체를 포함한다.
예 24는 예 23의 내용을 포함하고, 상기 데이터 레지스터의 폭 및 상기 암호 해시 함수에 의해 지정된 워드 크기에 기초하여 상기 세그먼트 길이를 정의하는 것을 더 포함한다.
예 25는 예 23 및 24 중 어느 하나의 내용을 포함하고, 상기 복수의 데이터 세그먼트를 인터리빙 방식으로 생성하는 것을 더 포함한다.
예 26은 예 23-25 중 어느 하나의 내용을 포함하고, 상기 버퍼의 길이가 상기 블록 크기의 배수이도록 상기 암호 해시 함수와 관련된 블록 크기를 결정하고 상기 데이터 버퍼를 패딩하는 것을 더 포함한다.
예 27은 예 23-26 중 어느 하나의 내용을 포함하고, 상기 버퍼의 길이가 상기 블록 크기와 데이터 세그먼트들의 수를 곱한 값과 동일하도록 상기 데이터 버퍼에 데이터 비트들의 고정 패턴을 첨부하는 것을 더 포함한다.
예 28은 예 23-27 중 어느 하나의 내용을 포함하고, 상기 컴퓨팅 장치의 마이크로프로세서의 특성에 기초하여 데이터 세그먼트들의 수를 결정하는 것을 더 포함한다.
예 29는 예 23-28 중 어느 하나의 내용을 포함하고, 상기 직렬 데이터 처리 알고리즘의 특성에 기초하여 데이터 세그먼트들의 수를 결정하는 것을 더 포함한다.
예 30은 예 23-29 중 어느 하나의 내용을 포함하고, 상기 암호 해시 알고리즘은 보안 해시 알고리즘 또는 MD5 알고리즘을 포함한다.

Claims (25)

  1. 데이터 버퍼를 처리하기 위한 컴퓨팅 장치로서,
    데이터 버퍼 처리 모듈
    을 포함하고,
    상기 데이터 버퍼 처리 모듈은,
    버퍼 길이 및 복수의 데이터 세그먼트를 갖는 데이터 버퍼에 액세스하고 - 각각의 데이터 세그먼트는 0보다 크고 상기 버퍼 길이보다 작은 세그먼트 길이를 갖고, 하나 이상의 워드를 포함함 -;
    상기 데이터 세그먼트들을 하나 이상의 데이터 레지스터 내로 직접 입력(read into)하고 - 상기 하나 이상의 데이터 레지스터 중 각각의 데이터 레지스터는 복수의 데이터 경로를 갖고, 상기 데이터 세그먼트들을 상기 하나 이상의 데이터 레지스터 내로 직접 입력하는 것은, 상기 하나 이상의 데이터 레지스터 중 임의의 데이터 레지스터 내로 직렬로 입력하는 것으로서, 각각의 데이터 세그먼트로부터의 하나의 워드를 동일한 데이터 레지스터의 상이한 데이터 경로 내로 직렬로 입력하는 것을 포함함 -;
    상기 하나 이상의 데이터 레지스터의 상기 데이터 경로들 각각에 대해 직렬 데이터 처리 알고리즘을 실질적으로 병렬로 수행하여 각각의 데이터 경로에 대한 결과를 생성하고;
    상기 데이터 경로들 각각에 대해 생성된 상기 직렬 데이터 처리 알고리즘의 상기 결과들을 결합하여 상기 직렬 데이터 처리 알고리즘의 출력을 형성하기 위한 것인 컴퓨팅 장치.
  2. 제1항에 있어서,
    상기 데이터 버퍼 처리 모듈은 암호 해시 알고리즘에 대한 확장으로서 구현되는 컴퓨팅 장치.
  3. 제1항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 컴퓨팅 장치의 마이크로프로세서의 단일 코어 상에서 실행되도록 구성되는 컴퓨팅 장치.
  4. 제3항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 단일 코어의 단일 스레드 상에서 실행되도록 구성되는 컴퓨팅 장치.
  5. 제1항에 있어서,
    상기 데이터 버퍼 처리 모듈은 상기 컴퓨팅 장치의 단일 명령어, 다중 데이터 가능 프로세서 상에서 실행되도록 구성되는 컴퓨팅 장치.
  6. 제1항에 있어서,
    상기 데이터 버퍼 처리 모듈은 단일 스레드 소프트웨어 애플리케이션과 함께 사용되도록 구성되는 컴퓨팅 장치.
  7. 임의 길이 데이터 버퍼를 처리하기 위한 컴퓨터 구현 방법으로서,
    상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 갖고, 하나 이상의 워드를 포함함 -;
    상기 데이터 세그먼트들 각각을 하나 이상의 데이터 레지스터 내로 스트리밍하는 단계 - 상기 하나 이상의 데이터 레지스터 중 각각의 데이터 레지스터는 복수의 데이터 경로 실행 유닛을 갖고, 상기 데이터 세그먼트들 각각을 상기 하나 이상의 데이터 레지스터 내로 스트리밍하는 단계는, 상기 하나 이상의 데이터 레지스터 중 임의의 데이터 레지스터 내로 직렬로 스트리밍하는 것으로서, 각각의 데이터 세그먼트로부터의 하나의 워드를 단일 데이터 포인터를 이용하여 동일한 데이터 레지스터의 상이한 데이터 경로 실행 유닛 내로 직렬로 스트리밍하는 단계를 포함함 -;
    상기 하나 이상의 데이터 레지스터의 상기 데이터 경로 실행 유닛들 각각에서 직렬 데이터 처리 알고리즘을 실질적으로 병렬로 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하는 단계; 및
    상기 데이터 경로 실행 유닛들 각각에 대해 생성된 상기 직렬 데이터 처리 알고리즘의 상기 결과들을 결합하여 상기 직렬 데이터 처리 알고리즘의 출력을 형성하는 단계
    를 포함하는 컴퓨터 구현 방법.
  8. 제7항에 있어서,
    상기 데이터 레지스터의 폭 및 상기 직렬 데이터 처리 알고리즘에 의해 지정된 워드 크기에 기초하여 상기 세그먼트 길이를 정의하는 단계를 포함하는 컴퓨터 구현 방법.
  9. 제7항에 있어서,
    상기 데이터 버퍼를 복수의 데이터 세그먼트로서 정의하는 단계는 상기 데이터 버퍼를 인터리빙 방식으로 상기 복수의 데이터 세그먼트로 분할하는 단계를 포함하는 컴퓨터 구현 방법.
  10. 삭제
  11. 제7항에 있어서,
    각각의 결과는 복수의 데이터 워드를 포함하고, 각각의 데이터 워드는 복수의 데이터 비트를 포함하고, 상기 결합은 상기 결과들을 상기 데이터 워드들에 의해 인터리빙하는 단계를 포함하는 컴퓨터 구현 방법.
  12. 제7항에 있어서,
    직렬 데이터 처리 알고리즘을 실행하는 단계는 암호 해시 함수를 실행하는 단계를 포함하는 컴퓨터 구현 방법.
  13. 제12항에 있어서,
    각각의 데이터 세그먼트에 대한 해시 다이제스트를 생성하는 단계를 포함하는 컴퓨터 구현 방법.
  14. 제13항에 있어서,
    상기 해시 다이제스트들을 결합하여 새로운 데이터 버퍼를 형성하고 상기 새로운 데이터 버퍼에 대해 상기 암호 해시 함수를 실행하는 단계를 포함하는 컴퓨터 구현 방법.
  15. 제7항에 있어서,
    상기 버퍼의 길이가 블록 크기의 배수이도록 상기 직렬 데이터 처리 알고리즘과 관련된 상기 블록 크기를 결정하고 상기 데이터 버퍼를 패딩하는 단계를 포함하는 컴퓨터 구현 방법.
  16. 제15항에 있어서,
    상기 버퍼의 길이가 상기 블록 크기와 데이터 세그먼트들의 수를 곱한 값과 동일하도록 상기 데이터 버퍼에 데이터 비트들의 고정 패턴을 첨부하는 단계를 포함하는 컴퓨터 구현 방법.
  17. 제7항에 있어서,
    상기 결합은 상기 결과들을 연결하고 상기 연결된 결과들에 대해 상기 직렬 데이터 처리 알고리즘을 실행하는 단계를 포함하는 컴퓨터 구현 방법.
  18. 제7항에 있어서,
    상기 데이터 레지스터의 특성 및 상기 직렬 데이터 처리 알고리즘의 특성에 기초하여 데이터 세그먼트들의 수를 결정하는 단계를 포함하는 컴퓨터 구현 방법.
  19. 복수의 명령어가 저장된 하나 이상의 기계 판독 가능 저장 매체로서,
    상기 복수의 명령어는 실행되는 것에 응답하여 컴퓨팅 장치로 하여금,
    데이터 버퍼를 복수의 데이터 세그먼트로 분할하게 하고 - 각각의 데이터 세그먼트는 0보다 크고 상기 데이터 버퍼의 길이보다 작은 세그먼트 길이를 갖고, 하나 이상의 워드를 포함함 -;
    상기 데이터 세그먼트들 각각을 상기 컴퓨팅 장치의 하나 이상의 데이터 레지스터 내로 직접 입력하게 하고 - 상기 하나 이상의 데이터 레지스터 중 각각의 데이터 레지스터는 복수의 데이터 경로 실행 유닛을 갖고, 상기 데이터 세그먼트들 각각을 상기 하나 이상의 데이터 레지스터 내로 직접 입력하는 것은, 상기 하나 이상의 데이터 레지스터 중 임의의 데이터 레지스터 내로 직접적으로 직렬로 입력하는 것으로서, 각각의 데이터 세그먼트로부터의 하나의 워드를 상기 컴퓨팅 장치의 동일한 데이터 레지스터의 상이한 데이터 경로 실행 유닛 내로 직렬로 입력하는 것을 포함함 -;
    상기 하나 이상의 데이터 레지스터의 상기 데이터 경로 실행 유닛들 각각에 대해 암호 해시 알고리즘을 실질적으로 병렬로 실행하여 각각의 데이터 경로 실행 유닛에 대한 결과를 생성하게 하고;
    상기 데이터 경로 실행 유닛들 각각에 대해 생성된 상기 암호 해시 알고리즘의 상기 결과들을 연결(concatenate)하게 하고;
    상기 연결된 결과들에 대해 상기 암호 해시 알고리즘을 실행하여 상기 암호 해시 알고리즘의 출력을 생성하게 하는 하나 이상의 기계 판독 가능 저장 매체.
  20. 제19항에 있어서,
    상기 암호 해시 알고리즘은 보안 해시 알고리즘 또는 MD5 알고리즘을 포함하는 하나 이상의 기계 판독 가능 저장 매체.
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
KR1020147034829A 2012-07-11 2013-07-10 단일 데이터 버퍼의 병렬 처리 KR101755541B1 (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,761 US10198248B2 (en) 2012-07-11 2012-09-28 Parallel processing of a single data buffer
US13/631,761 2012-09-28
PCT/US2013/049890 WO2014011746A1 (en) 2012-07-11 2013-07-10 Parallel processing of a single data buffer

Publications (2)

Publication Number Publication Date
KR20150008185A KR20150008185A (ko) 2015-01-21
KR101755541B1 true KR101755541B1 (ko) 2017-07-07

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 (2)

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 단일 데이터 버퍼의 병렬 처리

Country Status (6)

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

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
US10198248B2 (en) * 2012-07-11 2019-02-05 Intel Corporation Parallel 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 华为技术有限公司 数据处理设备和光传送网络交换机
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10686589B2 (en) 2015-12-04 2020-06-16 Hewlett Packard Enterprise Development Lp Combining hashes of data blocks
WO2018169911A1 (en) * 2017-03-14 2018-09-20 Yuan Li Reconfigurable parallel processing
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
KR102290229B1 (ko) * 2017-11-22 2021-08-20 한국전자통신연구원 병렬 처리를 위한 데이터 생성 장치
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

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080165953A1 (en) * 2006-10-23 2008-07-10 Sarvar Patel Processing method for message integrity with tolerance for non-sequential arrival of message data
JP2011081594A (ja) * 2009-10-07 2011-04-21 Mitsubishi Electric Corp データ処理装置及びデータ処理プログラム
WO2011056278A2 (en) * 2009-10-28 2011-05-12 Intel Corporation Context-sensitive slicing for dynamically parallelizing binary programs

Family Cites Families (22)

* 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
EP1252738A2 (en) 2000-01-31 2002-10-30 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
WO2008064153A2 (en) 2006-11-21 2008-05-29 Lucent Technologies Inc. Processing method for message integrity with tolerance for non-sequential arrival of message data
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
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
US10198248B2 (en) 2012-07-11 2019-02-05 Intel Corporation Parallel processing of a single data buffer

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080165953A1 (en) * 2006-10-23 2008-07-10 Sarvar Patel Processing method for message integrity with tolerance for non-sequential arrival of message data
JP2011081594A (ja) * 2009-10-07 2011-04-21 Mitsubishi Electric Corp データ処理装置及びデータ処理プログラム
WO2011056278A2 (en) * 2009-10-28 2011-05-12 Intel Corporation Context-sensitive slicing for dynamically parallelizing binary programs

Also Published As

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

Similar Documents

Publication Publication Date Title
KR101755541B1 (ko) 단일 데이터 버퍼의 병렬 처리
US20220006612A1 (en) Sm3 hash algorithm acceleration processors, methods, systems, and instructions
KR101592079B1 (ko) 레지스터 정렬을 위한 시스템, 장치 및 방법
RU2638766C2 (ru) Процессоры, способы, системы и инструкции для транскодирования точек кода переменной длины знаков unicode
KR20170097008A (ko) 벡터 요소 세트에 대해 축소 연산을 수행하기 위한 방법 및 장치
CN107924307B (zh) 按索引分散至寄存器以及数据元素重布置处理器、方法、系统和指令
CN110968348A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN111752618A (zh) 浮点加法器的交错流水线
KR20170097621A (ko) 충돌 검출을 수행하기 위한 방법 및 장치
CN107257955B (zh) 快速向量动态存储器冲突检测
CN112148210A (zh) 用于存储器保护的装置id
US20200266995A1 (en) Managing state in accelerators
KR20170097015A (ko) 마스크를 마스크 값들의 벡터로 확장하기 위한 방법 및 장치
CN115859315A (zh) 用于对安全存储装置的直接外围访问的系统、装置和方法
CN113849768A (zh) 伴随数据类型转换来加载和存储矩阵数据
US10318427B2 (en) Resolving memory accesses crossing cache line boundaries
KR20170094147A (ko) 스핀-루프 점프를 수행하기 위한 장치 및 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
GRNT Written decision to grant