KR20220054248A - 산술 및/또는 비트 유닛에 의한 조건문의 실행 - Google Patents
산술 및/또는 비트 유닛에 의한 조건문의 실행 Download PDFInfo
- Publication number
- KR20220054248A KR20220054248A KR1020217043317A KR20217043317A KR20220054248A KR 20220054248 A KR20220054248 A KR 20220054248A KR 1020217043317 A KR1020217043317 A KR 1020217043317A KR 20217043317 A KR20217043317 A KR 20217043317A KR 20220054248 A KR20220054248 A KR 20220054248A
- Authority
- KR
- South Korea
- Prior art keywords
- variable
- arithmetic
- expression
- boolean condition
- bit
- Prior art date
Links
- 230000014509 gene expression Effects 0.000 claims abstract description 205
- 238000000034 method Methods 0.000 claims abstract description 125
- 238000004590 computer program Methods 0.000 claims abstract description 123
- 239000011159 matrix material Substances 0.000 claims description 87
- 238000012545 processing Methods 0.000 claims description 57
- 230000001174 ascending effect Effects 0.000 claims description 14
- 239000012634 fragment Substances 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 11
- 230000008569 process Effects 0.000 description 55
- 238000006243 chemical reaction Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 21
- 230000009466 transformation Effects 0.000 description 20
- 230000009471 action Effects 0.000 description 16
- 238000003491 array Methods 0.000 description 11
- 238000005457 optimization Methods 0.000 description 8
- 230000009467 reduction Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000011156 evaluation Methods 0.000 description 5
- 238000007781 pre-processing Methods 0.000 description 4
- 239000013598 vector Substances 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000005549 size reduction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
- G06F7/575—Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/313—Logic programming, e.g. PROLOG programming language
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Peptides Or Proteins (AREA)
- Executing Machine-Instructions (AREA)
- Earth Drilling (AREA)
- Saccharide Compounds (AREA)
Abstract
산술 및/또는 비트 유닛에 의한 조건문의 실행을 위한 컴퓨터 저장 매체들 상에 인코딩되는 컴퓨터 프로그램들을 포함하는 방법들, 시스템들, 및 장치이다. 부울 조건을 포함하는 조건문을 포함하는 컴퓨터 프로그램이 액세스된다. 부울 조건은 부울 조건의 산술 및/또는 비트 표현식으로 변환된다. 컴퓨터 프로그램의 산술 및/또는 비트 표현식이 부울 조건 대신 부울 조건의 산술 및/또는 비트 표현식을 포함한다. 컴퓨터 프로그램의 산술 및/또는 비트 표현식은 프로세서의 산술 및/또는 비트 연산 유닛에 의해 실행된다.
Description
본 개시는 대체로 컴퓨팅 시스템들에 관한 것이고 더 상세하게는 컴퓨팅 회로에 의한 조건문들 및 표현식들의 실행에 관한 것이다.
컴퓨터 과학에서, 조건문들이 특정된 부울 조건이 참 또는 거짓으로 평가되는지의 여부에 의존하여 상이한 컴퓨테이션들 또는 액션들을 수행하는 프로그래밍 언어의 피처들이다.
조건문의 실행은 부울 조건의 평가를 요구하고, 따라서 숫자들의 비교를 요구한다. 이 비교는 하나의 숫자가 다른 숫자보다 큰지, 동일한지, 또는 작은지를 결정한다. 부울 조건들은 기존에는 디지털 비교기에 의해 평가된다. 디지털 비교기가 두 개의 숫자들을 이진 형태의 입력으로서 취하고 하나의 숫자가 다른 숫자보다 큰지, 작은지 또는 동일한지를 결정하는 하드웨어 전자 디바이스이다.
조건문들은 디지털 비교기의 출력을 사용하여 컴퓨터 코드의 하나 또는 다른 부분 중 어느 하나를 실행하도록 전환한다. 디지털 비교기의 각각의 전체 ≪if-then do≫ 동작은 프로세서의 적어도 2 클록 사이클들이 걸린다. 덧붙여서, 디지털 비교기는 종종 멀티레벨 조건부 태스크들의 병렬 실행을 수행할 수 없다. 그 결과, 디지털 비교기(또는 ALU의 논리 블록)는 종종 집적 회로(integrated circuit) 프로세서의 병목을 만들어 낸다.
본 명세서는 시스템이 프로세서의 산술 블록 및/또는 비트 유닛(bitwise unit)만으로 조건문들을 포함하는 컴퓨터 프로그램을 실행할 수 있는 방법을 설명한다.
본 명세서에서 설명되는 발명의 주제의 특정 실시예들은 다음 장점들 중 하나 이상을 실현하기 위해서 구현될 수 있다.
조건문들은 산술 및/또는 비트 연산(bitwise operation) 세트로 변환된다. 이와 같이, 컴퓨터 프로그램은 프로세서의 산술 및/또는 비트 유닛에 의해서만 실행될 수 있다. 특히, 컴퓨터 프로그램은 디지털 비교기를 사용하는 일없이 실행될 수 있다. 위에서 설명된 바와 같이, 디지털 비교기의 각각의 전체 동작에는 프로세서의 적어도 2 클록 사이클들이 걸린다. 프로세서의 산술 유닛들은, 한편으로는, 1 클록 사이클에 대부분의 산술 계산들을 실행할 수 있다. 이와 같이, 본 명세서에서 설명되는 기법들은 프로세서에 의해 컴퓨터 프로그램의 실행 속력을 개선시킨다. 산술 및/또는 비트 연산 유닛들에게 더 많은 공간을 허용하는 디지털 비교기는 제거될 수 있다. 일정한 칩 사이즈의 경우, 따라서 칩의 전력은 증가하여 실행 속력이 증가될 수 있다.
게다가, 디지털 비교기는 종종 멀티레벨 조건부 태스크들의 병렬 실행을 실행할 수 없다. 그 결과, 디지털 비교기는 종종 집적 회로 프로세서의 병목을 만들어 낸다. 산술 및/또는 비트 표현식들(arithmetic and/or bitwise expressions)은, 한편으로는, 다수의 단편들로 단편화될 수 있으며, 그 다음에 다수의 산술 및/또는 비트 블록들에 의해 병렬로 실행될 수 있다. 이와 같이, 본 명세서에서 설명되는 기법들은 추가로 병렬로 작업하는 다수의 산술 블록들에 의해 컴퓨터 프로그램을 실행함으로써 프로세서의 실행 속력을 개선시킨다.
그 방법은 임의의 적합한 프로그래밍 언어의 다양한 수준들에서 사용될 수 있다. 특히, 그 방법은 임의의 적합한 저수준 언어에서(예컨대, 어셈블리 언어, 또는 ISA(instruction set architecture)의 수준에서), 뿐만 아니라 특정 소프트웨어 프로그램의 임의의 적합한 고수준 프로그래밍언어 (예컨대, C++ 코드, Java 등)에서 사용될 수 있다.
본 명세서의 본 발명의 주제의 하나 이상의 실시예들은 첨부 도면들 및 아래의 설명에서 언급된다. 본 발명의 주제의 다른 특징들, 양태들, 및 장점들은 상세한 설명, 도면들, 및 청구범위로부터 명확하게 될 것이다.
도 1은 예시적인 시스템을 도시하는 도면이다.
도 2는 프로세서의 산술 및/또는 비트 유닛(들)만으로 컴퓨터 프로그램을 실행하기 위한 예시적인 프로세스의 흐름도이다.
도 3은 if-then(-else) 조건문의 기본 구조를 예시하는 의사코드이다.
도 4는 부울 조건을 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
도 5는 A = B를 A = B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
도 6은 A ≥ B를 A ≥ B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
도 7a 및 도 7b는 A < B를 A < B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스들의 흐름도들이다.
도 8은 조건문이 산술 체(arithmetic body)를 가질 때 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하기 위한 예시적인 프로세스의 흐름도이다.
도 9는 조건문이 비산술 체를 가질 때 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하기 위한 예시적인 프로세스의 흐름도이다.
도 10은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 제공하기 위한 예시적인 프로세스의 흐름도이다.
도 11a는 산술 체가 있는 조건문을 포함하는 C++ 컴퓨터 프로그램의 일 예이다. 도 11b는 도 11a의 컴퓨터 프로그램의 변환으로부터 생기는 C++ 컴퓨터 프로그램의 일 예이다. 도 11c는 산술 체가 있는 조건문을 포함하는 어셈블리 언어 컴퓨터 프로그램의 일 예이다. 도 11d는 도 11c의 컴퓨터 프로그램의 변환으로부터 생기는 어셈블리 언어 컴퓨터 프로그램의 일 예이다.
도 12a는 비산술 체가 있는 조건문을 포함하는 C++ 컴퓨터 프로그램의 일 예이다. 도 12b는 도 12a의 컴퓨터 프로그램의 변환으로부터 생기는 C++ 컴퓨터 프로그램의 일 예이다. 도 12c는 산술 체가 있는 조건문을 포함하는 어셈블리 언어 컴퓨터 프로그램의 일 예이다. 도 12d는 도 12c의 컴퓨터 프로그램의 변환으로부터 생기는 어셈블리 언어 컴퓨터 프로그램의 일 예이다.
도 13a 및 도 13b는 산술 및/또는 비트 연산 유닛의 집적 회로의 조합 로직 회로부의 예들을 도시한다.
도 14는 행렬형 데이터의 사이즈를 줄이기 위한 예시적인 프로세스의 흐름도이다.
도 15는 행렬형 데이터의 병렬 정렬을 위한 예시적인 프로세스의 흐름도이다.
도 2는 프로세서의 산술 및/또는 비트 유닛(들)만으로 컴퓨터 프로그램을 실행하기 위한 예시적인 프로세스의 흐름도이다.
도 3은 if-then(-else) 조건문의 기본 구조를 예시하는 의사코드이다.
도 4는 부울 조건을 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
도 5는 A = B를 A = B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
도 6은 A ≥ B를 A ≥ B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
도 7a 및 도 7b는 A < B를 A < B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스들의 흐름도들이다.
도 8은 조건문이 산술 체(arithmetic body)를 가질 때 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하기 위한 예시적인 프로세스의 흐름도이다.
도 9는 조건문이 비산술 체를 가질 때 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하기 위한 예시적인 프로세스의 흐름도이다.
도 10은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 제공하기 위한 예시적인 프로세스의 흐름도이다.
도 11a는 산술 체가 있는 조건문을 포함하는 C++ 컴퓨터 프로그램의 일 예이다. 도 11b는 도 11a의 컴퓨터 프로그램의 변환으로부터 생기는 C++ 컴퓨터 프로그램의 일 예이다. 도 11c는 산술 체가 있는 조건문을 포함하는 어셈블리 언어 컴퓨터 프로그램의 일 예이다. 도 11d는 도 11c의 컴퓨터 프로그램의 변환으로부터 생기는 어셈블리 언어 컴퓨터 프로그램의 일 예이다.
도 12a는 비산술 체가 있는 조건문을 포함하는 C++ 컴퓨터 프로그램의 일 예이다. 도 12b는 도 12a의 컴퓨터 프로그램의 변환으로부터 생기는 C++ 컴퓨터 프로그램의 일 예이다. 도 12c는 산술 체가 있는 조건문을 포함하는 어셈블리 언어 컴퓨터 프로그램의 일 예이다. 도 12d는 도 12c의 컴퓨터 프로그램의 변환으로부터 생기는 어셈블리 언어 컴퓨터 프로그램의 일 예이다.
도 13a 및 도 13b는 산술 및/또는 비트 연산 유닛의 집적 회로의 조합 로직 회로부의 예들을 도시한다.
도 14는 행렬형 데이터의 사이즈를 줄이기 위한 예시적인 프로세스의 흐름도이다.
도 15는 행렬형 데이터의 병렬 정렬을 위한 예시적인 프로세스의 흐름도이다.
도 1은 예시적인 시스템(100)을 도시하는 도면이다. 시스템(100)은 본 명세서에서 설명되는 기법들을 구현할 수 있는 시스템의 일 예이다.
시스템(100)은 중앙 프로세싱 유닛(Central Processing Unit)(CPU), 그래픽 프로세싱 유닛 (GPU), NPU(Neural Processing Unit), 텐서 프로세서 유닛(Tensor Processor Unit)(TPU), 또는 조건부 태스크들의 실행을 가능하게 하는 임의의 다른 유형의 프로세싱 유닛들과 같은 프로세서(110)를 포함한다. 프로세서는 컴퓨터 프로그램(182)에서 명령들에 의해 특정되는 기본 산술, 로직, 제어, 및 입출력(I/O) 동작들을 수행한다. 프로세서(110)는 CPU가 단일 금속 산화물 반도체(metal-oxide-semiconductor)(MOS) 집적 회로(IC) 칩(160) 상에 포함되는 마이크로프로세서일 수 있다. CPU를 포함하는 IC는 또한 동적 랜덤 액세스 메모리(dynamic random-access memory)(DRAM)와 같은 메모리 유닛(150), 뿐만 아니라 하나를 초과하는 수준의 캐시 메모리와, 입력 디바이스(들)(180) 또는 출력 디바이스(들)(190)에 연결될 주변 인터페이스들을 포함한다.
프로세서(110)는 산술 및 비트 로직 연산들을 수행하는 하나 이상의 산술 및/또는 비트 연산 유닛들(arithmetic and/or bitwise operation units)(ABU들)(130), 피연산자들을 ABU들(130)에 공급하고 ABU들의 연산들의 결과들을 저장하는 하나 이상의 레지스터들(140), 및 ABU들(130), 레지스터들(140) 및 다른 컴포넌트들의 조정된 동작들을 지시함으로써 명령들의 실행을 조율하는 하나 이상의 제어 유닛들(control units)(CU들)(120)을 포함하는 다수의 기능적 컴포넌트들을 포함한다.
ABU(130)는 산술 및/또는 비트 로직 연산들을 수행하는 디지털 회로이다. ABU(130)는 하나 이상의 산술 블록들(131), 하나 이상의 비트 시프트 블록들(132), 및 하나 이상의 비트 논리 블록들(133)을 포함할 수 있다. 산술 블록(131)은 더하기, 올리는 더하기(Add with carry), 빼기, 빌리는 빼기(Subtract with borrow)와 같은 산술 연산들을 수행한다. 비트 시프트 블록(132)은 산술 시프트, 논리적 시프트, 회전, 올림을 통한 회전과 같은 비트 시프트 연산을 수행한다. 비트 로직 블록(133)은 AND, OR, 배타적 OR과 같은 논리 연산들을 수행한다. 일부 실시예들에서, ABU(130)는 임의의 디지털 비교기를 포함하지 않는다. 일부 실시예들에서, 프로세서(110)는 임의의 디지털 비교기를 포함하지 않는다.
동작 시, 프로세서(110)는 명령들의 시퀀스를 포함하는 컴퓨터 프로그램(182)에 액세스하고 그 프로그램을 실행한다. 컴퓨터 프로그램(182)은 메모리 유닛(150)으로부터 또는 입력 디바이스(180)로부터 액세스될 수 있다. 그 프로세서는 페치, 디코드 및 실행 단계들을 포함하는 명령 사이클을 따를 수 있다. 다수의 명령들은 동시에 페치, 디코딩 및 실행될 수 있다. 실행 단계는 단일 액션 또는 일련의 액션들로 구성될 수 있다. 각각의 액션 동안, 프로세서의 다양한 부분들은 원하는 동작의 전체 또는 부분을 수행한 다음 액션이 완료될 수 있도록 전기적으로 연결된다. 그 결과들은 레지스터들(140) 중 하나에 또는 메모리 유닛(150)에 기입될 수 있다.
CU(120)는 프로세서(110)의 동작을 지시한다. CU(120)는 프로세서에 의해 액세스된 컴퓨터 프로그램(182)에 응답하도록 메모리(150), ABU(130)를 제어한다. 특히, CU(120)는 타이밍 및 제어 신호들을 제공함으로써 다른 유닛들의 동작을 지시할 수 있다.
일부 실시예들에서, CU(120)는 컴퓨터 프로그램(182)을 그 컴퓨터 프로그램의 산술 및/또는 비트 표현식(122)으로 변환하는 변환 유닛(121)을 포함한다. 변환 유닛(121)은 컴퓨터 프로그램(182)에서 발견된 조건문들을 식별하고 조건문들의 산술 및/또는 비트 표현식들로 변환한다. 변환 유닛(121)은 산술 및/또는 비트 연산들 및 피연산자들에 기초하여 컴퓨터 프로그램(182)의 산술 및/또는 비트 표현식(122)을 생성한다. CU(120)는 그 다음에 컴퓨터 프로그램(182)의 산술 및/또는 비트 표현식(122)을 ABU(130)에 제공한다. 다른 실시예들에서, 시스템은 컴퓨터 프로그램(182)에서 발견된 조건문들을 식별하고 조건문들의 산술 및/또는 비트 표현식들로 변환하는 별도의 데이터 프로세싱 장치를 포함한다.
일부 실시예들에서, 조건문들의 산술 및/또는 비트 표현식은 산술 및/또는 비트 연산들만을 포함한다. 일부 실시예들에서, 조건문들의 실질적으로(예컨대, 50%를 초과, 60%를 초과, 70%를 초과, 80%를 초과, 90%를 초과, 또는 95%를 초과하는) 모두가 변환되지만, 프로세서가 여전히 조건문들의 정의된 적절한 서브세트를 평가하는데 사용될 수 있는 디지털 압축기를 포함하면 일부 조건문들은 변환될 필요가 없다.
ABU(130)는 CU(120)로부터의 컴퓨터 프로그램(182)의 산술 및/또는 비트 표현식(122)에 액세스한다. ABU(130)는 레지스터들(140) 또는 메모리 유닛(150)로부터의 피연산자들에 액세스할 수 있다. 피연산자들은 또한 ABU(130) 자체에 의해 생성된 상수들일 수도 있다. ABU(130)는 또한 이전 연산 또는 현재 연산에 관한 정보를 운반하는 스테이터스 정보에 액세스할 수도 있다. ABU(130)는 수행된 연산들의 결과를 출력한다. 그 결과는 데이터 단어, 및/또는 스테이터스 정보 둘 다로 구성될 수 있다. 그 결과는 레지스터(140) 또는 메모리 유닛(150)에 저장될 수 있다.
도 2는 컴퓨터 프로그램을 실행하기 위한 예시적인 프로세스의 흐름도이다. 그 프로세스는 하나 이상의 로케이션들에서 하나 이상의 컴퓨터들 상에 설치되고 본 명세서에 따라 프로그래밍되는 하나 이상의 컴퓨터 프로그램들에 의해 구현될 수 있다. 예를 들어, 프로세스는 도 1에 도시된 시스템(100)에 의해 수행될 수 있다. 편의를 위해, 그 프로세스는 하나 이상의 컴퓨터들의 시스템에 의해 수행되는 것으로서 설명될 것이다. 일부 실시예들은, 변환된 컴퓨터 프로그램이 시스템(100) 상에서 실행되기 전에, 예컨대, 완전히 다른 컴퓨터 시스템 상에서 변환을 행하기 위해 컴퓨터 프로그램을 프리-프로세싱하는 것을 수반한다. 예를 들어, 소스 컴파일러가, 대상 컴퓨터를 위한 목적 코드(object code) 및/또는 머신 수준 코드를 생성할 때 변환을 행할 수 있다.
시스템은 컴퓨터 프로그램(예컨대, 도 1의 컴퓨터 프로그램(182))에 액세스한다(210). 그 시스템은 컴퓨터 프로그램이 부울 조건을 포함하는 적어도 하나의 조건문을 포함하는지의 여부를 결정한다(205). 컴퓨터 프로그램이 적어도 하나의 조건문을 포함하면, 시스템은 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환한다(220). 컴퓨터 프로그램이 임의의 조건문을 포함하지 않으면, 시스템은 컴퓨터의 산술 및/또는 비트 표현식을 ABU(130)에 실행을 위해 제공한다(240).
실행될 때, 특정된 부울 조건이 참으로 평가되는지 또는 거짓으로 평가되는지에 따라, 조건문이 프로세서로 하여금 연관된 태스크를 수행하게 한다. 그 태스크는 하나 이상의 컴퓨테이션들 및/또는 하나 이상의 액션들을 포함할 수 있다. 특정된 부울 조건은 적어도 한 변수를 값 또는 다른 변수 중 어느 하나와 비교해야 한다. 예를 들어, 그 비교는 변수(예컨대, A)의 값이 다른 변수(예컨대, B)의 값보다 큰지(예컨대, A>B인지), 동일한지(예컨대, A=B인지), 또는 적은지(예컨대, A<B인지)를 결정할 수 있다. 그 비교의 결과는 프로세서에 의해 실행될 연관된 태스크로 결정된다.
도 3은 if-then(-else) 조건문(310)의 기본 구조를 예시하는 의사코드이다. 인터프리터가 If를 발견할 때, 인터프리터는 부울 조건(301)을 예상하고 해당 부울 조건(301)을 참 또는 거짓인 값들 중 어느 하나로 평가한다. 그 조건이 참이면, 프로세서는 결과 태스크(302)를 실행한다. 그렇지 않으면, 그 실행은 다음 분기들로 계속된다. 대체 태스크(303)가 (예컨대, Else 블록에) 있으면, 프로세서는 대체 태스크(303)를 실행한다. Else 분기가 없으면, 프로세서는 End If에 뒤따르는 문을 실행한다. 어느 하나의 분기가 실행된 후, 제어는 end If 후의 지점으로 복귀한다.
다시 도 2로 가면, 시스템(예컨대, 변환 유닛(121))은 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환한다(220). 부울 조건의 산술 및/또는 비트 표현식은 조건문의 변수들을 변수들로서 취한다. 일부 구현예들에서, 부울 조건의 산술 및/또는 비트 표현식은 부울 조건의 산술 및/또는 비트 표현식의 출력이 하기 두 개의 성질들을 검증하도록 한다. 변수들의 값들이 부울 조건을 검증하면, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일하다. 변수들의 값들이 부울 조건을 검증하지 못하면, 부울 조건의 산술 및/또는 비트 표현식은 0과 동일하다. 이와 같이, 부울 값 TRUE는 1로 변환되는 한편, 부울 값 FALSE는 0으로 변환된다. 실행 시, 부울 조건의 산술 및/또는 비트 표현식은 실행되지 않을 부분들을 널링(nulling)하는 반면 실행될 실행가능 코드의 일부를 유지한다. 부울 조건문의 산술 및/또는 비트 표현식으로의 변환은 도 4에 관련하여 더 상세히 설명된다.
그 변환은 다양한 수준들의 임의의 적합한 프로그래밍 언어에서 수행될 수 있다. 특히, 그 방법은 임의의 적합한 저수준 언어에서(예컨대, 어셈블리 언어, 또는 ISA(instruction set architecture)의 수준에서), 뿐만 아니라 특정 소프트웨어 프로그램의 임의의 적합한 고수준 프로그래밍언어(예컨대, C++ 코드, Java 등)에서 사용될 수 있다. 프로세스는 소스 코드를 대상 머신을 위한 실행가능 코드로 컴파일할 때 프리-프로세싱 단계로서, 또는 컴파일러가 아니라 인터프리터에서 구현될 때 즉석(on-the-fly) 프로세싱으로 수행될 수 있다.
부울 조건을 산술 및/또는 비트 표현식으로 변환하는데 사용될 수 있는 특정 및 일반적인 변환 공식들의 예들은 아래에서 제공된다.
특정 변환 공식들의 (asm 및/또는 ISA 수준에서의) 예들
정수, 문자들 또는
부울
유형들에 대한 특정 변환
공식
float 또는 double 형들(부동소수점 형 데이터)에 대한 특정 변환 공식
모든 데이터 유형들(배열들(arrays) 및 문자열들 포함)에 대한 일반 변환 공식들의 예들
부울
조건 "if (=)"의 일반 변환
부울
조건 "if (>=)"의 일반 변환
부울
조건 "if (<)"의 일반 변환
부울
조건 "if (>)"의 일반 변환
표기법:
-
z는 기수(base number)이다.
-
A, B는 N 개 원소들을 포함하는 배열이다.
-
A[i], B[i]는 배열의 원소이다. 정수, 부동소수점 등과 같은 단일 원소가 단지 하나의 원소만을 갖는 1차원 배열(행 벡터 행렬)이다.
-
answer는 부울 조건의 산술 및/또는 비트 표현식이다.
-
%는 나눗셈의 나머지이다.
-
ceil(x)는 x를 x 이상의 최소 정수에 매핑하는 천장 함수(ceiling function)이다.
-
부울 조건이 x= y이면, k=x-y
-
부울 조건이 x≥ y이면, k=(x-y)-(|x-y|)
-
x<y는 x≥y에 대한 "else" 결과이다.
기수 z는 기수법의 밑(base)이 될 수 있다. 기수법의 밑이 있는 대부분의 산술연산들(예컨대, 거듭제곱 함수와 나눗셈의 나머지)은 시프트 연산들로 즉시 계산될 수 있다. 특히, 프로세서가 이진법을 사용하면, z는 2와 동일할 수 있다.
배열들 및 문자열들의 경우, 배열의 원소들은 정규화될 수 있다. 임의의 알려진 정규화 방법들은 사용될 수 있다. 이는 조건문의 실행 속력을 개선시킨다.
다시 도 2로 가면, 시스템(예컨대, 변환 유닛(121))은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성한다(230). 시스템은 컴퓨터 프로그램의 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 대체한다. 실행 시, 부울 조건의 산술 및/또는 비트 표현식은 실행되지 않을 부분들을 널링하는 반면 실행될 실행가능 코드의 일부를 유지한다. 컴퓨터 프로그램의 산술 및/또는 비트 표현식의 생성은 도 8 및 도 9에 관하여 더 상세히 설명된다.
시스템(예컨대, CU(120))은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 산술 및/또는 비트 유닛(예컨대, ABU(130))에 실행을 위해 제공한다(240). 컴퓨터 프로그램의 산술 및/또는 비트 표현식은 임의의 적합한 프로그래밍 언어, 특히, 임의의 적합한 저수준 언어에서(예컨대, 어셈블리 언어, 또는 ISA(instruction set architecture)의 수준에서), 뿐만 아니라 특정 소프트웨어 프로그램의 임의의 적합한 고급 프로그래밍 언어(예컨대, C++ 코드, 또는 Java 등)에서 있을 수 있다. 컴퓨터 프로그램의 산술 및/또는 비트 표현식의 실행은 숫자들의 임의의 직접 비교를 요구하지 않는다. 시스템은 따라서 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 산술 및/또는 비트 유닛, 특히 임의의 디지털 비교기를 포함하지 않는 산술 및/또는 비트 유닛에 제공한다.
시스템(예컨대, ABU(130))은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 실행한다(250). 조건문의 산술 및/또는 비트 표현식의 실행은 임의의 숫자 비교를 요구하지 않으면서도 조건문의 실행과 동일한 결과를 제공한다. 이와 같이, 임의의 디지털 비교기를 포함하지 않는 프로세서가 컴퓨터 프로그램을 실행할 수 있다. 산술 체가 있는 조건문의 실행은 도 11a 및 도 11b에 관하여 더 상세히 설명된다. 비산술 체가 있는 조건문의 실행은 도 12a 및 도 12b에 관하여 더 상세히 설명된다. 도 10에 관하여 더 상세히 설명되는 바와 같이, 컴퓨터 프로그램의 산술 및/또는 비트 표현식은 단편화될 수 있고 그 단편들은, 특히 다레벨 조건문들의 경우, 병렬로(예컨대, 동시에, 병행하여) 실행된다.
도 4는 부울 조건을 산술 및/또는 비트 표현식으로 변환(예컨대, 도 2의 220)하기 위한 예시적인 프로세스의 흐름도이다. 부울 조건은 A를 제1 변수로 그리고 B를 제2 변수로 한다.
시스템(예컨대, 변환 유닛(121))은 A에서 B를 뺀다(410).
시스템(예컨대, 변환 유닛(121))은 뺄셈의 결과의 절대 값을 컴퓨팅한다(420).
시스템(예컨대, 변환 유닛(121))은 뺄셈의 결과의 절대 값에 기초하여 지수를 컴퓨팅한다(430).
시스템(예컨대, 변환 유닛(121))은 컴퓨팅된 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅한다(440). 기수는 임의의 숫자일 수 있다. 특히, 기수는 프로세서에 의해 사용되는 기수법의 밑일 수 있다. 특히, 프로세서가 이진법을 사용하면, 기수는 2와 동일할 수 있다. 기수법의 밑이 있는 대부분의 산술연산들(예컨대, 거듭제곱 함수와 나눗셈의 나머지)은 시프트 연산들로 즉시 계산될 수 있다. 특히, 컴퓨팅된 지수에 의한 기수의 지수화는 1과 동일한 비트를 컴퓨팅된 지수와 동일한 자리수만큼 좌측으로 자리이동함으로써 수행될 수 있다. 이는 실행의 속력을 개선시킨다.
시스템(예컨대, 변환 유닛(121))은 부울 조건의 산술 및/또는 비트 표현식을 지수를 기수로 나눈 나머지로서 컴퓨팅한다(450).
그 지수는 부울 조건이 검증되면 지수가 0과 동일하도록 컴퓨팅된다. 0으로 거듭제곱된 임의의 숫자는 1이 된다. 이와 같이, 부울 조건이 검증되면, 지수는 0과 동일하고, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일할 것이다.
일부 실시예들에서, 기수는 2이다. 프로세서가 이진법을 사용하면, 지수를 기수로 나눈 나머지는 지수의 마지막 비트를 취함으로써 추출될 수 있다. 이는 계산의 복잡도를 줄인다.
도 5는 부울 조건 A = B를 A = B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
시스템(예컨대, 변환 유닛(121))은 A에서 B를 뺀다(510).
시스템(예컨대, 변환 유닛(121))은 510의 결과의 절대 값으로서 지수를 컴퓨팅한다(520).
시스템(예컨대, 변환 유닛(121))은 520에서 컴퓨팅된 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅한다(530).
시스템(예컨대, 변환 유닛(121))은 부울 조건의 산술 및/또는 비트 표현식을 530에서 컴퓨팅된 지수를 기수로 나눈 나머지로서 컴퓨팅한다(540).
A = B의 산술 및/또는 비트 표현식은 하기를 검증하도록 컴퓨팅된다. A = B이면, 지수는 0과 동일하고, A = B의 산술 및/또는 비트 표현식은 1과 동일하다. A ≠ B이면, 지수는 0과 동일하지 않고, A = B의 산술 및/또는 비트 표현식은 0과 동일하다.
도 6은 부울 조건 A ≥ B를 A ≥ B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
시스템(예컨대, 변환 유닛(121))은 A에서 B를 뺀다(610).
시스템(예컨대, 변환 유닛(121))은 610의 결과의 절대 값을 컴퓨팅한다(620).
시스템(예컨대, 변환 유닛(121))은 620의 결과에서 610의 결과를 뺀다(630).
시스템(예컨대, 변환 유닛(121))은 630의 결과의 절대 값으로서 지수를 컴퓨팅한다(640).
시스템(예컨대, 변환 유닛(121))은 640에서 컴퓨팅된 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅한다(650).
시스템(예컨대, 변환 유닛(121))은 부울 조건의 산술 및/또는 비트 표현식을 650에서 컴퓨팅된 지수를 기수로 나눈 나머지로서 컴퓨팅한다(660).
A ≥ B의 산술 및/또는 비트 표현식은 하기를 검증하도록 컴퓨팅된다. A ≥ B이면, 지수는 0과 동일하고, A ≥ B의 산술 및/또는 비트 표현식은 1과 동일하다. A < B이면, 지수는 0과 동일하지 않고, A ≥ B의 산술 및/또는 비트 표현식은 0과 동일하다.
도 7a는 부울 조건 A < B를 A < B의 산술 및/또는 비트 표현식으로 변환하기 위한 예시적인 프로세스의 흐름도이다.
시스템(예컨대, 변환 유닛(121))은 A에서 B를 뺀다(710).
시스템(예컨대, 변환 유닛(121))은 710의 결과의 절대 값을 컴퓨팅한다(720).
시스템(예컨대, 변환 유닛(121))은 720의 결과에서 710의 결과를 뺀다(730).
시스템(예컨대, 변환 유닛(121))은 730의 결과의 절대 값으로서 지수를 컴퓨팅한다(740).
시스템(예컨대, 변환 유닛(121))은 740에서 컴퓨팅된 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅한다(750).
시스템(예컨대, 변환 유닛(121))은 부울 조건의 산술 및/또는 비트 표현식을 750에서 컴퓨팅된 지수를 기수로 나눈 나머지로서 컴퓨팅한다(760).
A < B의 산술 및/또는 비트 표현식은 하기를 검증하도록 컴퓨팅된다. A<B이면, 지수는 0과 동일하고, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일하다. A≥B이면, 지수는 0과 동일하지 않고, 부울 조건의 산술 및/또는 비트 표현식은 0과 동일할 것이다.
도 7b는 부울 조건 A < B를 A < B의 산술 및/또는 비트 표현식으로 변환하기 위한 다른 예시적인 프로세스의 흐름도이다.
시스템(예컨대, 변환 유닛(121))은 A에서 B를 뺀다(710B).
시스템(예컨대, 변환 유닛(121))은 A에서 B를 뺀 결과의 빌린 값(borrow value)으로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅한다(720B).
A<B의 산술 및/또는 비트 표현식은 하기를 검증하도록 컴퓨팅된다. A<B이면, A에서 B를 뺀 결과의 빌린 값은 1과 동일하고, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일하다. A≥B이면, A에서 B를 뺀 결과의 빌린 값은 0과 동일하고, 부울 조건의 산술 및/또는 비트 표현식은 0과 동일하다.
도 8은 조건문이 산술 체를 가질 때 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성(예컨대, 도 2의 230)하기 위한 예시적인 프로세스의 흐름도이다. 일 예가 도 11a 및 도 11b에 관하여 더 상세히 설명된다.
시스템(예컨대, 변환 유닛(121))은 결과 태스크(예컨대, 도 3의 302)의 문에 부울 조건의 산술 및/또는 비트 표현식을 곱한다(810). 이와 같이, 컴퓨터 프로그램이 실행될 때, 하기가 일어난다. 부울 조건이 검증되면, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일하며, 결과 태스크는 부울 조건의 산술 및/또는 비트 표현식과의 곱셈에 의해 유지되고, 결과 태스크는 실행된다. 부울 조건이 검증되지 않으면, 부울 조건의 산술 및/또는 비트 표현식은 0과 동일하며, 결과 태스크는 부울 조건의 산술 및/또는 비트 표현식과의 곱셈에 의해 널화되고(nullified), 결과 태스크는 실행되지 않는다.
조건문이 산술문으로서 공식화되는 대체 태스크(예컨대, 도 3의 303)를 포함하면, 시스템(예컨대, 변환 유닛(121))은 산술 결과 태스크에 1 빼기 부울 조건의 산술 및/또는 비트 표현식을 곱한다(820). 이와 같이, 컴퓨터 프로그램이 실행될 때, 하기가 일어난다. 부울 조건이 검증되면, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일하다. 결과 태스크는 부울 조건의 산술 및/또는 비트 표현식과의 곱셈에 의해 유지되는 반면, 대체 태스크는 1 빼기 부울 조건의 산술 및/또는 비트 표현식과의 곱셈에 의해 널화된다. 그 결과, 결과 태스크는 실행되는 반면, 대체 태스크는 실행되지 않는다. 부울 조건이 검증되지 않으면, 부울 조건의 산술 및/또는 비트 표현식은 0과 동일하며, 결과 태스크는 부울 조건의 산술 및/또는 비트 표현식과의 곱셈에 의해 널화되는 반면, 대체 태스크는 1 빼기 부울 조건의 산술 및/또는 비트 표현식과의 곱셈에 의해 유지된다. 그 결과, 대체 태스크는 실행되는 반면, 결과 태스크는 실행되지 않는다.
도 9는 조건문이 비산술 체를 가질 때 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성(예컨대, 도 2의 230)하기 위한 예시적인 프로세스의 흐름도이다. 일 예가 도 12a 및 도 12b에 관하여 더 상세히 설명된다.
시스템(예컨대, 변환 유닛(121))은 컴퓨터 프로그램의 산술 및/또는 비트 표현식에, 부울 조건의 산술 및/또는 비트 표현식에 연관되는 라벨로의 무조건 점프를 포함시킨다. 라벨은 조건 문의 산술 및/또는 비트 표현식이 1과 동일할 때 라벨이 결과 태스크(예컨대, 도 3의 302)의 시작 문과 동일하도록 부울 조건의 산술 및/또는 비트 표현식으로 개시된다. 이와 같이, 컴퓨터 프로그램이 실행될 때, 하기가 일어난다. 부울 조건이 검증되면, 부울 조건의 상기 산술 및/또는 비트 표현식은 1과 동일하다. 라벨은 결과 태스크의 시작 문과 동일하다. 무조건 점프 문은 결과 태스크를 가리킨다. 실행 동안, 프로세서가 무조건 점프 문을 발견할 때, 프로세서는 결과 태스크를 실행한다.
대체 태스크(예컨대, 도 3의 303)가 있으면, 라벨은 조건 문의 산술 및/또는 비트 표현식이 0과 동일할 때 대체 태스크의 시작 문과 동일하도록 추가로 개시된다. 이와 같이, 컴퓨터 프로그램이 실행될 때, 하기가 일어난다. 부울 조건이 검증되면, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일하며, 라벨은 결과 태스크의 시작 문과 동일하며, 무조건 점프 문은 결과 태스크를 가리키고, 결과 태스크는 실행된다. 조건문이 검증되지 않으면, 부울 조건의 산술 및/또는 비트 표현식은 0과 동일하며, 라벨은 대체 태스크의 시작 문과 동일하며, 점프 문은 대체 태스크를 가리키고, 대체 태스크는 실행된다.
도 10은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 제공(예컨대, 도 2의 240)하고 옵션적으로 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 실행(예컨대, 도 2의 250)하기 위한 예시적인 프로세스의 흐름도이다. 산술 및/또는 비트 표현식은 단편화된다. 다수의 단편들은 그 다음에 다수의 산술 및/또는 비트 블록들에 의해 병렬로 실행될 수 있다. 이와 같이, 프로세서의 실행 속력은 병렬로 작업하는 다수의 산술 블록들에 의해 컴퓨터 프로그램을 실행함으로써 개선될 수 있다. 게다가, 다레벨 조건문들은 병렬로 실행될 수 있다.
시스템(예컨대, 변환 유닛(121))은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 다수의 단편들로 단편화한다(1010).
시스템(예컨대, ABU(130))은 단편들을 병렬로 실행한다(1020). 특히, ABU(130)는 멀티스레딩을 수행할 수 있다. ABU(130)는 적어도 두 개의 단편들을 병렬로 실행한다. 특히, 그 단편들은 역 폴란드 표기법(Reverse Polish Notation)을 사용하여 실행될 수 있다.
도 11a는 산술 체가 있는 조건문(1101A)을 포함하는 C++ 컴퓨터 프로그램의 일 예이다.
조건문(1101A)의 부울 조건(1101A)은 x가 y와 동일한지의 여부이다. 결과 태스크(1102)는 z가 1과 동일하는 것이다. 대체 태스크(1103)는 z가 0과 동일하는 것이다. 조건문(1110A)은 하기와 같이 표현될 수 있다:
x가 y와 동일하면, z는 1과 동일하다.
x가 y와 동일하지 않으면, z는 0과 동일하다.
조건문(1110A)의 실행은 따라서 변수들(x 및 y)의 비교를 요구한다.
도 11b는 도 11a의 컴퓨터 프로그램의 변환으로부터 생기는 C++ 컴퓨터 프로그램의 일 예이다.
조건문(1110A)은 산술 및/또는 비트 연산들만을 포함하는 산술 및/또는 비트 표현식(1110B)으로 변환된다. 부울 조건의 산술 및/또는 비트 표현식(1101B)은 z=1<<(x-y))%2이다. 이와 같이, x가 y와 동일하면, z=1<<(x-y))%2=1이고, x가 y와 동일하지 않으면, z=1<<(x-y))%2=0이다.
조건문의 산술 및/또는 비트 표현식(1101B)의 실행은 따라서 조건문(1101A)의 실행과 동일한 결과를 제공하지만 변수들(x 및 y)의 비교를 요구하지 않는다.
도 11c는 산술 체가 있는 조건문을 포함하는 어셈블리 언어 컴퓨터 프로그램(1100C)의 일 예이다. 도 11d는 도 11c의 컴퓨터 프로그램의 변환으로부터 생기는 어셈블리 언어 컴퓨터 프로그램(1100D)의 일 예이다.
도 12a는 비산술 체가 있는 조건문(1201A)을 포함하는 C++ 컴퓨터 프로그램의 일 예이다.
조건문(1201A)의 부울 조건(1201A)은 x가 y와 동일한지의 여부이다. 결과 태스크(1201)는 "Equals"를 출력하는 것이다. 대체 태스크(1202)는 "Not equals"를 출력하는 것이다. 조건문(1210A)은 하기와 같이 표현될 수 있다. x가 y와 동일하면, 프로그램은 "Equals"를 출력한다. x가 y와 동일하지 않으면, 프로그램은 "Not equals"를 출력한다.
도 12b는 도 12a의 컴퓨터 프로그램의 변환으로부터 생기는 C++ 컴퓨터 프로그램의 일 예이다.
조건문(1210A)은 산술 및/또는 비트 연산들만을 포함하는 산술 및/또는 비트 표현식(1210B)으로 변환된다. 부울 조건(1201B)의 산술 및/또는 비트 표현식은 res=(1<<k)%2이며, 여기서 k=x-y이다. 이와 같이, x=y이면, res=(1<<k)%2=1인 반면, x≠y이면, res=(1<<k)%2=0이다. 무조건 점프(1204)가 초기화 문(1205)으로 초기화된다. 무조건 점프는 무조건 점프를 라벨("condition[res]")에 제공한다.
조건 문의 산술 및/또는 비트 표현식이 1과 동일할 때(res=1), 라벨("condition[1]")은 결과 태스크(1201)의 시작 문("to_do")과 동일하다. 무조건 점프 문은 결과 태스크(1201)를 가리킨다. 실행 동안, 프로세서가 무조건 점프 문(1204)을 발견할 때, 프로세서는 결과 태스크(1201)를 실행한다.
조건 문의 산술 및/또는 비트 표현식이 0과 동일할 때(res=0), 라벨("condition[0]")은 대체 태스크(1202)의 시작 문("elso_do")과 동일하다. 무조건 점프 문은 대체 태스크(1202)를 가리킨다. 실행 동안, 프로세서가 무조건 점프 문(1204)을 발견하면, 프로세서는 대체 태스크(1202)를 실행한다.
조건문의 산술 및/또는 비트 표현식의 실행은 따라서 조건문의 실행과 동일한 결과를 제공한다.
도 12c는 산술 체가 있는 조건문을 포함하는 어셈블리 언어 컴퓨터 프로그램(1200C)의 일 예이다. 도 12d는 도 12c의 컴퓨터 프로그램의 변환으로부터 생기는 어셈블리 언어 컴퓨터 프로그램(1200D)의 일 예이다.
도 13a는 ABU의 집적 회로의 조합 로직 회로부(1310A)의 일 예를 도시한다.
조합 로직 회로부(1310A)는 두 개의 비트들의 뺄셈을 수행하는데 사용되는 절반 뺄셈기(1302)를 포함한다. 절반 뺄셈기는 XOR 게이트(1303), NOT 게이트(1304), 및 AND 게이트(1305)를 포함한다. 절반 뺄셈기(1302)는 두 개의 입력들, 즉, 피감수(minuend) A(1311)와 감수(subtrahend) B(1312)를 갖는다. 절반 뺄셈기(1302)는 두 개의 출력들, 즉, 차이(1313) 및 받아내림수(borrow out)(1314)를 갖는다. 받아내림수 신호(1314)는 조건부 로직 회로부(1310A)가 멀티 자리 뺄셈에서 다음 자리로부터 빌릴 필요가 있을 때 설정된다. 받아내림수 신호(1314)는 A가 0과 동일하고 B가 1과 동일한 경우에만 1과 동일하다. 받아내림수 신호는 따라서 A<B일 때 1과 동일하고, A≥B일 때 0과 동일하다. 그러므로, 받아내림수 신호는 부울 조건 A<B의 평가를 제공한다.
시프트 오퍼레이터(1306)는 1과 동일한 비트를 차이 신호(1313)와 동일한 자리수만큼 좌측으로 자리이동시킨다. 이는 A에서 B를 뺀 결과에 의한 기수의 지수화를 초래한다. 시프트 오퍼레이터(1306)는 A에서 B를 뺀 결과에 의한 기수로 지수를 나눈 나머지와 동일한 결과의 첫 번째 우측 비트를 출력한다. 시프트 오퍼레이터(1306)의 출력은 따라서 A=B와 동일할 때 1과 동일하고, A≠B일 때 0과 동일하다. 시프트 오퍼레이터(1306)는 그러므로 부울 조건 A=B의 평가를 제공한다.
도 13b는 변수들(A 및 B) 각각이 단지 하나의 비트만을 포함할 때 ABU의 집적 회로의 조합 로직 회로부(1310B)의 일 예를 도시한다. 조건부 로직 회로부(1310B)는 NOR 게이트(1320)와, NOT 게이트(1330)를 포함한다. NOT 게이트(1330)의 출력은 부울 조건 A=B의 평가를 제공한다.
덧붙여서, 일부 구현예들에서, 원소들이 숫자들 및/또는 캐릭터들에 의해 표현되는 행렬형 데이터(배열들, 리스트들, 벡터들 등) 사이에 부울 조건이 있을 때 다음의 기법들이 사용된다. 이들 기법들을 사용하면 행렬형 데이터를 비교하는 효율성을 개선시킬 수 있고, 따라서 또한 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 프로세스를 개선시킨다. 행렬형 변수들(A 및 B)에서 각각의 개별 숫자 또는 캐릭터를 (동일한 자리에서) 비교하는 것이 아니라, 비교될 행렬형 개체들(matrix type objects)(예컨대, 배열들)의 사이즈는, 도 14에 관련하여 설명된 바와 같이, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 효율을 개선하기 위하여, 축소될 수 있다.
도 14는, 예컨대, 비교될 행렬형 데이터의 사이즈를 줄이기 위한 예시적인 프로세스의 흐름도이다. 그 프로세스는 하나 이상의 로케이션들에서 하나 이상의 컴퓨터들 상에 설치되고 본 명세서에 따라 프로그래밍되는 하나 이상의 컴퓨터 프로그램들에 의해 구현될 수 있다. 예를 들어, 프로세스는 도 1에 도시된 시스템(100)에 의해 수행될 수 있다. 편의를 위해, 그 프로세스는 하나 이상의 컴퓨터들의 시스템에 의해 수행되는 것으로 설명될 것이지만, 도 14의 프로세스는 변환을 행할 컴퓨터 프로그램의 프리-프로세싱의 일부일 수 있고 그래서 변환된 컴퓨터 프로그램을 실행하는 동일한 컴퓨터 시스템 상에서 수행될 필요가 없다는 것에 주의해야 한다. 덧붙여서, 도 14의 프로세스가 행렬형 데이터, 예컨대, 배열들, 리스트들, 벡터들 등과 같은 데이터 개체들을 갖는 단일 변수에 관련하여 설명되지만, 이 프로세스는 부울 조건에서 비교될 변수(예컨대, 변수 A 및 변수 B)의 각각에 대해 수행된다는 것이 이해되어야 한다.
시스템은 변수가 홀수 수의 원소들을 갖는지의 여부를 결정한다(1400). 만약 그렇다면, 단일 원소는 후속 프로세싱 동안 변수가 분할(1410)되기 전에 변수로부터 제거될 수 있고(1405), 이 단일 원소는 형성되는 변수의 더 작은 버전에 추가된다. 예를 들어, 새로운 행렬형 변수가 변수의 더 작은 버전에 대해 인스턴스화될 수 있고, 입력 변수의 원소(예컨대, 마지막 원소)의 데이터 값은 새로운 변수에 (예컨대, 새로운 변수의 첫 번째 원소에) 추가될 수 있고 그 다음에 해당 원소는 초기 변수로부터 제거되어 분할(1410)에 대해 짝수 수의 원소들을 초래할 수 있다. 동일한 단일 원소(예컨대, 배열에서, 위치의 측면에서임)는 비교될 각각의 개별 변수로부터 (변수의 더 작은 버전에의 추가를 위해) 제거되어야 한다(1405)는 것에 주의한다. 게다가, 일부 구현예들은 제자리에 있는 변수로 작업하고, 그 변수의 새로운 버전을 인스턴스화하는 것을 수반하지 않고; 따라서, 아래의 변수에 대한 언급들은 새로운 변수들을 인스턴스화하는 구현예들과 새로운 변수들을 인스턴스화하지 않는 구현예들을 포함한다. 마지막으로, 다차원 배열들은 여기서 재귀적으로 설명되는 동일한 프로세스를 수행함으로써 핸들링될 수 있다는 것에 주의한다.
변수는 2원소 쌍들로 분할되며(1410), 여기서 2원소 쌍들의 각각의 원소에서의 데이터 값들은 더 작은 변수를 위한 데이터 값들을 형성하는데 사용될 것이다. 예를 들어, 첫 번째 2원소 쌍은 입력 변수의 첫 번째 및 두 번째 원소들일 수 있으며, 두 번째 2원소 쌍은 입력 변수의 세 번째 및 네 번째 원소들일 수 있고, 세 번째 2원소 쌍은 입력 변수의 다섯 번째 및 여섯 번째 원소들일 수 있다는 등등이다. 또한, 2원소 쌍들은 (변수의 각각의 원소가 단지 하나의 쌍의 일부인 경우) 다른 적합한 방식들로 형성될 수 있다. 쌍들로의 분할(1410)은 비교되는 변수들의 각각의 세트에 대해, 예컨대, 주어진 유형의 모든 비교되는 변수들에 대해 동일한 방식으로 행해져야 한다는 것에 주의한다. 일반적으로, 부울 조건에 의해 비교될 각각의 변수의 더 작은 버전이 수열의 구성원들 사이의 차이가 증가하는 수열로부터의 대표 숫자들을 사용하여 형성되며, 여기서 각각의 개별 숫자는 2원소 쌍들로부터의 숫자들 또는 캐릭터들의 쌍을 나타내는 하나의 숫자이고, 각각의 변수의 더 작은 버전은 또한 입력 변수가 홀수 수의 데이터 원소들을 가질 때 해당 입력 변수로부터의 단일 원소(예컨대, 마지막 데이터 원소)를 포함할 것이다. 더구나, 일부 구현예들에서, 비교되는 (행렬형) 변수들의 각각에 대한 모든 최적화 단계들은 절대적으로 동일하게 수행된다.
숫자들 또는 캐릭터들의 쌍을 하나의 숫자로서 표현하기 위해, 이들 수열들의 구성원들 사이의 차이가 증가하는 수열들의 성질을 사용할 수 있으며, 이는 차이가 증가하는 수열들(등비수열 등)의 두 개의 구성원들의 합이 유일하다고 말한다. 따라서, 변수의 2원소 쌍들에서의 각각의 원소 쌍에 대해, 수열의 구성원들이 변수의 2원소 쌍들에서의 원소 쌍 ― 원소 쌍에서의 각각의 데이터 값이 수열의 구성원들 중 각각의 구성원에 대한 위치 인덱스로서 사용됨 ― 에 해당하는 그 수열의 해당 구성원들은 합산된다(1415). 이는 그 쌍에서의 각각의 원소를 그 쌍에서의 원소의 데이터 값과 동일한 수열에서의 인덱스를 갖는 수열의 구성원에 의해 대체한 다음 변수의 2원소 쌍들에서의 각각의 원소 쌍에 대해 수열의 두 개의 구성원들을 함께 더하여 더 작은(축소된 사이즈의) 변수에서의 각각의 개별 대표 숫자를 형성하는 것으로서 이해될 수 있다. 비교되는 (행렬형) 변수들에 대한 대표 숫자들을 도출(1415)하기 위해, 동일한 (하나의 선택된) 수열이 적용되고; 일부 구현예들에서, 동일한 수열은 비교되는 (행렬형) 모든 변수들에 대해 (대표 숫자들을 도출할 때) 적용된다는 것에 주의한다.
시스템은 또한 변수에서의 원소들의 위치가 중요한지를 결정할 수 있다(1420). 예를 들어, 그 위치들은 (정렬된 배열들에서의 원소들의 위치들이 이미 알려져 있으므로) 정렬된 배열들로 작업할 때 중요하지 않고 그 위치들은 쌍 [2,3]이 쌍 [3,2]와 동일한 것으로 간주되는 논리적 조건으로 작업할 때 중요하지 않다. 다른 경우들에서, 그 위치들은, 예컨대, 쌍 [2,3]이 쌍 [3,2]와 동일한 것으로서 간주되지 않을 때 중요하다. 위치가 중요하지 않으면, 수열의 숫자들의 각각의 개별 합산으로부터의 각각의 대표적인 숫자는 그대로 사용할 수 있다. 하지만 변수에서의 원소들의 위치들이 중요하면, 위치 변수들은 변수의 2원소 쌍들에서의 원소 쌍들에 대해 컴퓨팅된다(1425). 한 쌍의 원소들에 대한 각각의 위치 변수의 컴퓨팅(1425)은 부울 조건 Y > X의 결과에 의한 음수 1의 지수화를 수반하며, 여기서 X는 원소 쌍에서 첫 번째 원소이고, Y는 원소 쌍에서의 두 번째 원소이다. 따라서, Y > X이면, 위치 변수는 음수 1이고, Y ≤ X이면, 위치 변수는 양수 1이다. 더구나, 역 부울 조건은 또한 일부 구현예들에서 사용될 수 있다는 것에 주의한다.
원소들의 위치들이 중요한 비교되는 변수들의 경우, 대표 숫자들은 수열의 구성원들의 각각의 합에 변수의 2원소 쌍들에서의 대응하는 원소 쌍에 대한 위치 변수를 곱함으로써(1430) 추가로 형성된다. 따라서, F(n)을 (수열의 구성원들 사이에서 차이가 증가하는) 선택된 수열에서 인덱스에 의해 숫자를 결정하는 함수로 하면, x는 첫 번째 숫자일 수 있으며, y는 두 번째 숫자일 수 있고, z는 그것으로부터 형성되는 고유 숫자(대표 숫자)일 수 있다. 쌍에서의 원소들의 위치가 중요한 공식은 다음과 같다:
Z = ((-1)^
condition(y > x)
)*F(x)+F(y)
또는
쌍에서의 원소들의 위치가 중요하지 않은 공식은 다음과 같다:
Z = F(x)+F(y)
이들 수열들의 구성원들 사이에서 차이가 증가하는 수열들은 |a(i+1) - a(i)| > |a(i) - a(i -1)|인 수열들, 예를 들어, 등비수열, 지수수열 등이라는 것에 주의한다. 여기서 an은 수열에서 n과 동일한 인덱스(위치)를 갖는 수열의 구성원이다. 또한, 피보나치 수열(Fibonacci sequence)은 수열(progression)의 세 번째 구성원으로 시작하여, 이 성질을 수용한다.
게다가, 대표 숫자들은 원래의 변수들(A 및 B) 사이의 부울 조건을 평가함에 있어서 사용하기 위해, 또는 원래의 변수들(A 및 B) 사이의 부울 조건의 평가 전에 변수들의 사이즈의 추가 축소에서 사용하기 위해, 더 작은(축소된 사이즈) 버전의 변수에 저장된다(1435). 예를 들어, 각각의 새로운 쌍의 대표 숫자는 이전 배열의 더 작은 (춧소된 사이즈) 버전인 새로운 배열에 추가될 수 있다. 대표 숫자들은 초기 변수로부터 제거된(1405) 임의의 단일 원소와 함께, 변수의 더 작은 버전에, 비교되는 모든 변수들에 대해 동일한 순서로, 저장되어야 한다(1435)는 것에 주의한다.
시스템은 추가의 사이즈 축소가 그 변수에 필요한지의 여부를 결정할 수 있다(1440). 예를 들어, 추가의 축소가 (1) 추가적인 사이즈 축소를 수행하는데 소요된 시간의 양 (변수에서의 원소들의 수와 비교되는 변수들의 수가 더 클수록, 통상적인 비교보다 축소의 시간적인 이점이 더 큼) 및/또는 (2) (행렬형 변수들(A 및 B)에서 동일한 자리에서의 각각의 개별 숫자 또는 캐릭터의) 전통적인 비교에 비해 소비되는 메모리의 양(진행의 높은 증가로 인해, 긴 산술에 대한 지원이 없을 시, 축소된 변수에서의 원소들의 값들은 증가할 것이며, 또한 메모리를 절약하기 위해, 시스템들은 원소들의 값들을 반올림할 수 있으며, 이는 매우 큰 또는 작은 숫자들에 대한 충돌들로 이어질 수 있음)의 관점에서 효율을 개선시킬 수 없을 때 그러한 추가의 축소는 필요하지 않다. 따라서, 추가 축소가 필요하지 않으면, 도 14의 프로세스는 종료된다. 추가의 축소가 필요하면, 도 14의 프로세스는 변수의 사이즈를 다시 반복하여 축소시킨다.
도 14의 프로세스는 부울 조건에서 비교될 양 변수들(A 및 B)(행렬형 데이터를 가짐)에 대해 수행된다는 것에 주의한다. 도 14의 프로세스를 사용하여 사이즈가 축소된 변수들의 원소들의 데이터 값들은 숫자들 및/또는 캐릭터들일 수 있고, 변수들(A 및 B)의 이 사이즈 축소의 결과는 부울 조건의 부울 조건의 산술 및/또는 비트 표현식으로의 변환 효율이 개선된다는 것이다.
게다가, 위에서 언급된 바와 같이, 비교될 행렬형 변수들에서의 원소들의 위치들은 정렬된 배열들로 작업할 때 중요하지 않다. 이러한 견지에서, 일부 구현예들에서, 비교될 행렬형 변수들(배열들, 리스트들, 벡터들 등) 중 각각의 행렬형 변수는 결정(1420), 컴퓨팅(1425) 및 곱셈(1430) 동작들의 하나 이상의 부분들(또는 모두)을 피하기 위해서 정렬된다. 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 것과 조합하여, 다음의 정렬 기법이 개선된 효율을 제공할 수 있다. 예를 들어, 현대 정렬 기법들(예컨대, 퀵정렬(quicksort) 또는 큐소트(qsort), 버블 정렬(bubble sort), 선택 정렬, 삽입 정렬 등)을 사용하여 단일 스레드 상에서 전체 배열을 정렬하는 것이 아니라, 배열은 가용 스레드들의 수에 대응하는 수의 더 작은 부배열들로 분할될 수 있으며, 각각의 더 작은 부배열 프로세싱은 별도의 스레드에 의해 병렬로 실행될 수 있고 원래의 배열에서 각각의 원소의 (검색된) 위치 인덱스가 각각의 원소의 값을 초기 배열의 다른 원소들과 비교함으로써 결정된다.
도 15는 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 것과 조합하여 사용될 수 있는 바와 같이, 예컨대, 비교될 행렬형 데이터의 병렬 정렬을 위한 예시적인 프로세스의 흐름도이다. 그 프로세스는 하나 이상의 로케이션들에서 하나 이상의 컴퓨터들 상에 설치되고 본 명세서에 따라 프로그래밍되는 하나 이상의 컴퓨터 프로그램들에 의해 구현될 수 있다. 예를 들어, 프로세스는 도 1에 도시된 시스템(100)에 의해 수행될 수 있다. 편의를 위해, 프로세스는 하나 이상의 컴퓨터들의 시스템에 의해 수행되는 것으로 설명될 것이지만, 도 15의 프로세스는 변환을 행할 컴퓨터 프로그램의 프리-프로세싱의 일부일 수 있고 그래서 변환된 컴퓨터 프로그램을 실행하는 동일한 컴퓨터 시스템 상에서 수행될 필요가 없다는 것에 주의해야 한다. 어느 경우에나, 이 병렬 정렬 스킴은 프로세싱 동작들의 전체 컴퓨테이션 효율을 개선시킬 수 있다.
초기 (정렬을 위해 선택된) 행렬형 데이터 변수에 기초하여, 시스템은 행렬형 데이터 변수와는 동일한 수의 원소들을 갖는 새로운 변수를 인스턴스화할 수 있다(1500). 예를 들어, 초기 (정렬될) 배열에서와 동일한 수량의 원소들을 갖는 새로운 배열이 생성될 수 있고 그 새로운 배열에서의 모든 원소 위치들은 널 값들로 채워질 수 있다. 시스템은 새로운 변수를 저장하기 위해 필요한 메모리 볼륨을 할당한다.
행렬형 데이터 변수는 시스템에 의해 정렬을 수행하기 위해 사용되는 프로세싱될 스레드들의 수와 동일한 수의 하위 부분들로 나누어진다(1505). 예를 들어, 초기 (정렬될) 배열은 정렬 태스크를 위해 할당된 스레드들의 수와 동일한 수의 부배열들로 분할될 수 있다. 행렬형 데이터 변수의 하위 부분들은 차원(들)이 동일할 필요는 없다는 것에 주의한다.
시스템에서의 각각의 프로세싱 스레드들 중 각각의 프로세싱 스레드는 해당 프로세싱 스레드에 의해 처리되는 하위 부분에서의 각각의 원소에 대한 위치 인덱스를 결정한다(1510). 이는 하위 부분의 각각의 원소의 값을 행렬형 데이터 변수에서의 다른 모든 값들과 비교하는 것과, 행렬형 데이터 변수의 얼마나 많은 원소들이 하위 부분의 비교된 원소보다 적은지(또는 역 위치 인덱스에 대해 큰지)를 카운트하는 것을 수반할 수 있다. 예를 들어, 각각의 스레드의 수준에서, 시스템은 부배열의 각각의 원소의 값을 초기 배열에서의 원소들의 나머지의 값들과 비교하고 비교된 원소보다 값이 더 많은(또는 적은) 초기 배열의 원소들의 수를 카운트함으로써 정렬된 배열에서의 각각의 부배열의 각각의 원소에 대한 위치 인덱스를 결정할 수 있다.
비교된 원소보다 값이 적은 원소들의 수를 카운트할 때, 결과적인 카운트는 위치 인덱스이며, 즉, 0의 카운트는 행렬형 데이터 변수의 다른 값들이 그 변수의 하위 부분에서의 비교된 값보다 작지 않음을 나타내며, 그래서 이 비교된 값은 (오름 차순으로 정렬할 때) 정렬된 변수에서 첫 번째에 놓인다. 반면에, 비교된 원소보다 값이 더 큰 원소들의 수를 카운트할 때, 결과적인 카운트는 역 위치 인덱스이며, 즉, 0의 카운트는 행렬 형 데이터 변수의 다른 값들이 그 변수의 하위 부분에서의 비교된 값보다 크지 않음을 나타내며, 그래서 이 비교된 값은 (오름 차순으로 정렬할 때) 정렬된 변수에서 마지막에 놓인다.
일부 구현예들에서, 시스템은 정렬이 내림 차순에 비해 오름 차순으로 행하지는지의 여부를 결정한다(1515). 다른 구현예들에서, 정렬은 항상 하나의 순서 또는 다른 순서로 행해지고, 그래서 결정(1515)은 시스템에 의해 필요하지 않다.
오름 차순으로 정렬할 때, 시스템은 프로세싱 스레드들에 의해 결정되는 위치 인덱스들에 따라 행렬형 데이터 변수로부터의 값들로 새로운 변수에서의 값들을, 오름 차순으로, 대체한다(1520). 따라서, 정규 위치 인덱스의 경우(카운팅이 더 적은 원소들의 수가 되었던 경우) 위치 인덱스 0을 갖는 행렬형 데이터 변수에서의 값은 새로운 변수에서 첫 번째 위치에 놓이며, 위치 인덱스 1을 갖는 행렬형 데이터 변수에서의 값은 새로운 변수에서 두 번째 위치에 놓이며, 위치 인덱스 2를 갖는 행렬형 데이터 변수에서의 값은 새로운 변수에서 세 번째 위치에 놓이는 등등이다. 예를 들어, 초기 배열에서 부배열들의 수준에서의 위치 인덱스 카운팅의 결과들은 새로운 배열에서의 널 값들을 오름 차순에서 동일한 위치 인덱스를 갖는 초기 배열로부터의 각각의 값들에 의해 대체함으로써 새로운 배열에 결합될 수 있다.
시스템은 그 다음에 새로운 변수에 임의의 남아 있는 비변경된 값들이 있는지를 알기 위해 체크한다(1525). 예를 들어, 시스템은 초기 배열에서 동일한 값 원소들의 존재의 결과로서 널 값을 갖는 새로운 원소들이 배열에 여전히 존재하는지의 여부를 체크할 수 있다. 이 스테이지에서 새로운 배열에 널 값 원소들이 없는 경우, 새로운 배열은 정렬된 (초기) 배열의 동등물인 것으로 간주될 수 있다. 초기 변수의 다른 원소에서의 값과 동일한 값을 갖는 초기 변수에서의 각각의 원소가 당해 다른 원소와는 동일한 위치 인덱스를 얻을 것이고, 그래서 초기 변수에 동일한 값들이 있을 때 새로운 변수에서의 원소들의 하나 이상은 교체(1520) 후에 변경 없이 남아 있을 것이라는 것에 주의한다.
이것이 발생할 때, 시스템은 새로운 변수에서의 임의의 남아 있는 비변경된 값들을 새로운 변수에서의 좌측 인접 원소 값으로 대체한다(1530). 예를 들어, 새로운 배열에서 널 값들을 갖는 남아 있는 모든 원소들은 널 값 원소들로부터 좌측에서 발견되는 첫 번째(널 아닌) 값 원소에 의해 대체될 수 있으며, 그 후 새로운 배열은 정렬된 (초기) 배열의 동등물이라고 간주될 수 있다. 이들 대체들은 초기 행렬형 데이터 변수의 원소들에서 동일한 값들의 수를 고려하여, 필요에 따라 여러 번 행해진다.
비슷하게, 내림 차순으로 정렬할 때, 시스템은 새로운 변수의 값들을 프로세싱 스레드들에 의해 결정되는 위치 인덱스들에 따라 행렬형 데이터 변수로부터의 값들로, 내림 차순으로 대체한다(1535). 따라서, 역 위치 인덱스의 경우(카운팅이 더 많은 원소들의 수가 되었던 경우) 위치 인덱스 0을 갖는 행렬형 데이터 변수에서의 값은 새로운 변수에서 첫 번째 위치에 놓이며, 위치 인덱스 1을 갖는 행렬형 데이터 변수에서의 값은 새로운 변수에서 두 번째 위치에 놓이며, 위치 인덱스 2를 갖는 행렬형 데이터 변수에서의 값은 새로운 변수에서 세 번째 위치에 놓이는 등등이다. 예를 들어, 초기 배열에서 부배열들의 수준에서의 위치 인덱스 카운팅의 결과들은 새로운 배열에서의 널 값들을 내림 차순에서 동일한 위치 인덱스를 갖는 초기 배열로부터의 각각의 값들에 의해 대체함으로써 새로운 배열에 결합될 수 있다.
시스템은 그 다음에 새로운 변수에 임의의 남아 있는 비변경된 값들이 있는지를 알기 위해 체크한다(1540). 예를 들어, 시스템은 초기 배열에서 동일한 값 원소들의 존재의 결과로서 널 값을 갖는 새로운 원소들이 배열에 여전히 존재하는지의 여부를 체크할 수 있다. 이 스테이지에서 새로운 배열에 널 값 원소들이 없는 경우, 새로운 배열은 정렬된 (초기) 배열의 동등물인 것으로 간주될 수 있다. 초기 변수의 다른 원소에서의 값과 동일한 값을 갖는 초기 변수에서의 각각의 원소가 당해 다른 원소와는 동일한 위치 인덱스를 얻을 것이고, 그래서 초기 변수에 동일한 값들이 있을 때 새로운 변수에서의 원소들의 하나 이상은 교체(1535) 후에 변경 없이 남아 있을 것이라는 것에 주의한다.
이것이 발생할 때, 시스템은 새로운 변수에서의 임의의 남아 있는 비변경된 값들을 새로운 변수에서의 우측 인접 원소 값으로 대체한다(1545). 예를 들어, 새로운 배열에서 널 값들을 갖는 남아 있는 모든 원소들은 널 값 원소들로부터 우측에서 발견되는 첫 번째(널 아닌) 값 원소에 의해 대체될 수 있으며, 그 후 새로운 배열은 정렬된 (초기) 배열의 동등물이라고 간주될 수 있다. 이는 초기 행렬형 데이터 변수의 원소들에서 동일한 값들의 수를 고려하여, 필요에 따라 여러 번 행해진다.
마지막으로, 시스템은 행렬형 데이터 변수의 정렬된 버전으로서 새로운 변수를 사용한다(1550). 일부 경우들에서, 이는 도 14의 프로세스에서 초기 행렬형 데이터 변수 대신 새로운 변수를 사용하여 행해진다. 일부 경우들에서, 이는 초기 행렬형 데이터 변수에서의 값들을 새로운 변수에서의 정렬된 값들로 덮어씀으로써 행해지고, 이제 정렬된 행렬형 데이터 변수는 도 14의 프로세스에서 사용된다.
추가적으로, 도 15의 병행 정렬 프로세스는 도 14의 행렬 최적화(행렬형 데이터를 비교하기 위한) 프로세스와는 다른 맥락에서 효율적으로 사용될 수 있다는 것에 주의해야 한다. 예를 들어, 도 15의 병행 정렬 프로세스는 또한 본 출원에서 설명되는 바와 같이, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 방법을 사용하여, 매우 다양한 태스크들에 대해 표준 정렬을 최적화하는 것과 같은 (추가의 행렬 최적화 및 비교의 필요 없이) 행렬형 데이터의 효율적인 정렬의 맥락에서 사용될 수 있다.
일부 구현예들에서, 행렬형 데이터 개체를 정렬하는 방법이, 행렬형 데이터 개체로서 동일한 수의 원소들을 갖는 새로운 오브젝트를 인스턴스화하는 동작; 행렬형 데이터 개체를 정렬을 수행하기 위해 사용되는 프로세싱될 스레드들의 수와 동일한 수의 하위 부분들로 나누는 동작; 각각의 프로세싱 스레드들 중 각각의 프로세싱 스레드에 의해, 하위 부분의 각각의 원소의 값을 행렬형 데이터 개체에서의 다른 모든 값들과 비교하고 행렬형 데이터 개체의 얼마나 많은 원소들이, 역 위치 인덱스에 대해, 하위 부분의 비교된 원소보다 작은지, 또는 큰지를 카운트함으로써 프로세싱 스레드에 의해 처리되는 하위 부분에서의 각각의 원소에 대한 위치 인덱스를 결정하는 동작; 오름 차순 또는 내림 차순 중 어느 하나로, 프로세싱 스레드들에 의해 결정되는 위치 인덱스들에 따라 행렬형 데이터 개체로부터의 값들로 새로운 개체에서의 값들을 대체하는 동작; 및 정렬이 오름 차순인지 또는 내림 차순인지에 의존하여, 새로운 개체 ― 새로운 개체는 행렬형 데이터 개체의 정렬된 버전으로서 사용됨 ― 에서의 좌측 인접 원소 값 또는 우측 인접 원소 값 중 어느 하나로 새로운 개체에서의 임의의 남아 있는 비변경된 값들을 대체하는 동작을 포함할 수 있다. 값들을 비교하는 것에 의한 위치 인덱스들의 결정은 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하기 위한 도 1 내지 도 13에 관련하여 설명되는 시스템들 및 기법들을 채용할 수 있고, 이는 프로세싱 동작들의 증가된 효율을 초래한다는 것에 주의한다.
게다가, 도 14의 행렬형 데이터(또는 개체들)를 비교하는 프로세스의 최적화는 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 것 외의 맥락에서 효율적으로 사용될 수 있다는 것에 주의해야 한다. 예를 들어, 이 행렬 변수 최적화 프로세스는 또한 표준 비교를 최적화하는 것과 같이, 부울 조건을 산술 및/또는 비트 표현식으로 변환하는 일 없이, 비교의 맥락에서 사용될 수 있다. 더구나, 도 14의 최적화 프로세스는 비교 프로세스와는 독립적으로 사용될 수 있다. 예를 들어, 도 14의 최적화 프로세스는 (더 적은 메모리가 요구되는) 효율적인 저장을 위해 행렬의 더 작은 사이즈 행렬로의 압축을 위해 사용될 수 있다.
일부 구현예들에서, 도 14의 행렬 변수 최적화 프로세스는 행렬형 개체 비교들의 효율을 더 일반적으로 증가시키는데 사용된다. 따라서, (일부 실시예들에 따르는) 방법이, 제1 변수(A) 및 제2 변수(B) ― 제1 및 제2 변수들(A 및 B)의 각각은 행렬형 데이터를 포함함 ― 를 포함하는 부울 조건을 포함하는 조건문을 포함하는 컴퓨터 프로그램에 액세스하는 동작; 제1 및 제2 변수들(A 및 B)의 각각을 각각 제1 변수(A)의 제1 2원소 쌍들 및 제2 변수(B)의 제2 2원소 쌍들로 분할하는 동작; 및 수열의 구성원들 사이의 차이가 증가하는 수열로부터의 대표 숫자들을 사용하여, 비교를 위해, 제1 및 제2 변수들(A 및 B)의 각각의 더 작은 버전들을 형성하는 동작을 포함할 수 있으며, 제1 변수(A)의 더 작은 버전에 대한 대표 숫자들의 각각은 제1 변수(A)의 제1 2원소 쌍들에서의 데이터 값들과 동일한 수열에서의 인덱스들을 갖는 수열의 각각의 구성원들로부터 컴퓨팅되며, 제2 변수(B)의 더 작은 버전에 대한 대표 숫자들 중 각각의 대표 숫자는 제2 변수(B)의 제2 2원소 쌍들에서의 데이터 값들과 동일한 수열에서의 인덱스들을 갖는 수열의 각각의 구성원들로부터 컴퓨팅되고, 제1 및 제2 변수들(A 및 B)의 각각이 홀수의 원소들을 가질 때, 분할하는 동작 전에 제1 및 제2 변수들(A 및 B)의 각각으로부터 단일 원소를 제거하고, 제1 및 제2 변수들(A 및 B)의 각각으로부터의 단일 원소를 제1 및 제2 변수들(A 및 B)의 더 작은 버전들에 각각 더하는 동작을 포함한다. 게다가, 이 방법은 컴퓨터 프로그램을 실행할 때 조건문의 부울 조건을 평가하기 위해 제1 및 제2 변수들(A 및 B)의 더 작은 버전들을 비교하는 동작을 포함한다.
일부 실시예들에서, 위의 방법의 형성하는 동작은, 제1 변수(A)의 더 작은 버전의 각각의 원소에 대해, 제1 변수(A)의 제1 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개를 합산함으로써, 제1 변수(A)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작; 및 제2 변수(B)의 더 작은 버전의 각각의 원소에 대해, 제2 변수(B)의 제2 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개를 합산함으로써, 제2 변수(B)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작을 포함한다.
일부 실시예들에서, 위의 방법은, 제1 변수(A)의 제1 2원소 쌍들에 대한 제1 위치 변수들을 컴퓨팅하는 동작; 및 제2 변수(B)의 제2 2원소 쌍들에 대한 제2 위치 변수들을 컴퓨팅하는 동작을 포함하며, 원소 쌍에 대한 각각의 위치 변수를 컴퓨팅하는 동작은 부울 조건 Y > X의 결과에 의한 음수 1과 동일한 숫자의 지수화를 포함하며, X는 원소 쌍에서의 제1 원소이고, Y는 원소 쌍에서의 제2 원소이며; 그리고 형성하는 동작은 제1 변수(A)의 더 작은 버전의 각각의 원소에 대해, 제1 위치 변수들 중 하나에 제1 변수(A)의 제1 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개의 합을 곱함으로써 제1 변수(A)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작, 및 제2 변수(B)의 더 작은 버전의 각각의 원소에 대해, 제2 위치 변수들 중 하나에 제2 변수(B)의 제2 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개의 합을 곱함으로써 제2 변수(B)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작을 포함한다.
일부 구현예들에서, 동일한 (같은) 동작들, 순서들, 수단들(instruments)(예컨대, 수학적 진행 수열들)이 비교되는 모든 (행렬형) 변수들에 대해 적용된다. 더구나, 이 문서에서 설명되는 시스템들 중 하나 이상은 하나 이상의 메모리 유닛들이 하나 이상의 명령 프로세싱 유닛들이 위의 방법(들)의 동작들을 수행하게 하도록 구성되는 하나 이상의 실시예들에서 사용될 수 있다. 행렬형 개체 비교들을 위한 이들 시스템들 및 방법들은, 행렬형 데이터가 해당 특정 컴퓨터 상에서 이전에 가능했던 것보다 (주어진 프로세싱 능력을 갖는) 특정 컴퓨터 상에서 더 빠르게 비교될 수 있으므로, 개선된 프로세싱 속력을 초래한다. 또한, 행렬형 개체 비교들을 위한 이들 시스템들 및 방법들은 변수의 더 작은 버전이 초기 변수보다 적은 메모리를 요구할 수 있기 때문에 더 적은 메모리 소비를 초래할 수 있다.
일부 실시예들은, 컴퓨터 프로그램 ― 컴퓨터 프로그램은 부울 조건을 포함하는 조건문을 포함함 ― 에 액세스하는 동작; 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작; 부울 조건 대신에 부울 조건의 산술 및/또는 비트 표현식을 포함하는 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하는 동작; 및 컴퓨터 프로그램의 산술 및/또는 비트 표현식 ― 컴퓨터 프로그램의 산술 및/또는 비트 표현식은 프로세서의 산술 및/또는 비트 연산 유닛에 의해 실행되도록 구성됨 ― 을 제공하는 동작을 포함하는 방법을 포함한다. 부울 조건의 산술 및/또는 비트 표현식은 다음을 검증할 수 있다: 부울 조건이 검증되면, 부울 조건의 산술 및/또는 비트 표현식은 1과 동일하고; 부울 조건이 검증되지 않으면, 부울 조건의 산술 및/또는 비트 표현식은 0과 동일하다.
위의 방법의 일부 실시예들에서, 부울 조건은 제1 변수(A)와 제2 변수(B)를 취하고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은, A에서 B를 빼는 동작; A에서 B를 뺀 결과의 절대 값을 컴퓨팅하는 동작; A에서 B를 뺀 결과의 절대 값에 기초하여 지수를 컴퓨팅하는 동작; 컴퓨팅된 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅하는 동작; 및 지수를 기수로 나눈 나머지에 기초하여 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함한다. 부울 조건은 A = B일 수 있고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은 A에서 B를 뺀 결과의 절대 값으로서 지수를 컴퓨팅하는 동작; 및 지수를 기수로 나눈 나머지로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함할 수 있다.
부울 조건은 A ≥ B일 수 있고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은, A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산하는 동작; A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산한 결과의 절대 값으로서 지수를 컴퓨팅하는 동작; 및 지수를 기수로 나눈 나머지로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함할 수 있다.
부울 조건은 A < B일 수 있고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은, A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산하는 동작; A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산한 결과의 절대 값으로서 지수를 컴퓨팅하는 동작; 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅하는 동작; 및 1 빼기 지수를 기수로 나눈 나머지로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함할 수 있다.
제1 및 제2 변수들(A 및 B)은 부동수소점 유형 데이터일 수 있다. 일부 실시예들에서, 부울 조건은 A = B이며, 제1 및 제2 변수들(A 및 B)은 부동소수점형 데이터이고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은, A에서 B를 뺀 결과의 절대 값에 적용되는 천장 함수의 결과로서 지수를 컴퓨팅하는 동작; 및 지수를 기수로 나눈 나머지로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함한다. 일부 실시예들에서, 부울 조건은 A ≥ B이며, 제1 및 제2 변수들(A 및 B)은 부동소수점형 데이터이고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은, A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산하는 동작; A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산한 결과의 절대값에 적용되는 천장 함수의 결과로서 지수를 컴퓨팅하는 동작; 및 지수를 기수로 나눈 나머지로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함한다. 일부 실시예들에서, 부울 조건은 A < B이며, 제1 및 제2 변수들(A 및 B)은 부동소수점형 데이터이고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은, A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산하는 동작; A에서 B를 뺀 결과의 절대 값으로부터 A에서 B를 뺀 결과를 감산한 결과의 절대값에 적용되는 천장 함수의 결과로서 지수를 컴퓨팅하는 동작; 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅하는 동작; 및 1 빼기 지수를 기수로 나눈 나머지로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함한다.
일부 실시예들에서, 제1 및 제2 변수들(A 및 B)은 부울형 데이터(0 및 1)일 수 있으며, 부울 조건은 A = B일 수 있고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 동작은, A와 B의 합을 컴퓨팅하는 동작; 및 1 빼기 합을 기수로 나눈 나머지로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 동작을 포함할 수 있다.
일부 실시예들에서, 제1 및 제2 변수들(A 및 B)은 행렬형 데이터를 포함할 수 있고, 그 방법은, 제1 및 제2 변수들(A 및 B)의 각각을 각각 제1 변수(A)의 제1 2원소 쌍들 및 제2 변수(B)의 제2 2원소 쌍들로 분할하는 동작; 및 수열의 구성원들 사이의 차이가 증가하는 수열로부터의 대표 숫자들을 사용하여, 비교를 위해, 제1 및 제2 변수들(A 및 B)의 각각의 더 작은 버전들을 형성하는 동작을 포함할 수 있으며, 제1 변수(A)의 더 작은 버전에 대한 대표 숫자들의 각각은 제1 변수(A)의 제1 2원소 쌍들에서의 데이터 값들과 동일한 수열에서의 인덱스들을 갖는 수열의 각각의 구성원들로부터 컴퓨팅되며, 제2 변수(B)의 더 작은 버전에 대한 대표 숫자들 중 각각의 대표 숫자는 제2 변수(B)의 제2 2원소 쌍들에서의 데이터 값들과 동일한 수열에서의 인덱스들을 갖는 수열의 각각의 구성원들로부터 컴퓨팅되고, 제1 및 제2 변수들(A 및 B)의 각각이 홀수의 원소들을 가질 때, 분할하는 동작 전에 제1 및 제2 변수들(A 및 B)의 각각으로부터 단일 원소를 제거하고, 제1 및 제2 변수들(A 및 B)의 각각으로부터의 단일 원소를 제1 및 제2 변수들(A 및 B)의 더 작은 버전들에 각각 더하는 동작을 포함한다.
형성하는 동작은, 제1 변수(A)의 더 작은 버전의 각각의 원소에 대해, 제1 변수(A)의 제1 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개를 합산함으로써, 제1 변수(A)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작; 및 제2 변수(B)의 더 작은 버전의 각각의 원소에 대해, 제2 변수(B)의 제2 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개를 합산함으로써, 제2 변수(B)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작을 포함한다.
위의 방법은 또한, 제1 및 제2 변수들(A 및 B)의 각각을 정렬하는 동작을 포함할 수 있으며, 행렬형 데이터 변수의 정렬하는 동작은, 행렬형 데이터 변수로서 동일한 수의 원소들을 갖는 새로운 오브젝트를 인스턴스화하는 동작; 행렬형 데이터 변수를 정렬을 수행하기 위해 사용되는 프로세싱될 스레드들의 수와 동일한 수의 하위 부분들로 나누는 동작; 각각의 프로세싱 스레드들 중 각각의 프로세싱 스레드에 의해, 하위 부분의 각각의 원소의 값을 행렬형 데이터 변수에서의 다른 모든 값들과 비교하고 행렬형 데이터 변수의 얼마나 많은 원소들이, 역 위치 인덱스에 대해, 하위 부분의 비교된 원소보다 작은지, 또는 큰지를 카운트함으로써 프로세싱 스레드에 의해 처리되는 하위 부분에서의 각각의 원소에 대한 위치 인덱스를 결정하는 동작; 오름 차순 또는 내림 차순 중 어느 하나로, 프로세싱 스레드들에 의해 결정되는 위치 인덱스들에 따라 행렬형 데이터 변수로부터의 값들로 새로운 변수에서의 값들을 대체하는 동작; 및 정렬이 오름 차순인지 또는 내림 차순인지에 의존하여, 새로운 변수에서의 좌측 인접 원소 값 또는 우측 인접 원소 값 중 어느 하나로 새로운 변수에서의 임의의 남아 있는 비변경된 값들을 대체하는 동작을 포함할 수 있으며, 새로운 변수는 행렬형 데이터 변수의 정렬된 버전으로서 사용된다.
위의 방법은 또한 제1 변수(A)의 제1 2원소 쌍들에 대한 제1 위치 변수들을 컴퓨팅하는 동작; 및 제2 변수(B)의 제2 2원소 쌍들에 대한 제2 위치 변수들을 컴퓨팅하는 동작을 포함할 수 있으며, 원소 쌍에 대한 각각의 위치 변수를 컴퓨팅하는 동작은 부울 조건 Y > X의 결과에 의한 음수 1과 동일한 숫자의 지수화를 포함하며, X는 원소 쌍에서의 제1 원소이고, Y는 원소 쌍에서의 제2 원소이며; 그리고 형성하는 동작은 제1 변수(A)의 더 작은 버전의 각각의 원소에 대해, 제1 위치 변수들 중 하나에 제1 변수(A)의 제1 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개의 합을 곱함으로써 제1 변수(A)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작, 및 제2 변수(B)의 더 작은 버전의 각각의 원소에 대해, 제2 위치 변수들 중 하나에 제2 변수(B)의 제2 2원소 쌍들에서의 데이터 값들에 대응하는 수열의 각각의 구성원들 중 두 개의 합을 곱함으로써 제2 변수(B)의 더 작은 버전에 대한 대표 숫자들을 컴퓨팅하는 동작을 포함한다.
위의 실시예들에서, 기수는 2와 동일할 수 있으며, 프로세서는 이진법을 사용하고, 지수를 기수로 나눈 나머지는 지수의 마지막 비트를 취함으로써 추출된다. 게다가, 프로세서가 이진법을 사용할 때, 컴퓨팅된 지수에 의한 기수의 지수화는 1과 동일한 비트를 컴퓨팅된 지수와 동일한 자리수만큼 좌측으로 자리이동함으로써 수행될 수 있다.
부울 조건은 A < B일 수 있고, 부울 조건을 부울 조건의 산술 및/또는 비트 표현식으로 변환하는 것은, A에서 B를 빼는 것; A에서 B를 뺀 결과의 빌린 값으로서 부울 조건의 산술 및/또는 비트 표현식을 컴퓨팅하는 것을 포함할 수 있다.
컴퓨터 프로그램의 산술 및/또는 비트 표현식을 제공하는 동작은, 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 산술 및/또는 비트 표현식의 다수의 단편들을 단편화하는 동작을 포함할 수 있고, 산술 및/또는 비트 표현식이 단편들은 병렬로 실행되도록 구성될 수 있다.
부울 조건은 산술문으로서 공식화되는 결과 태스크를 포함할 수 있고, 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하는 동작은 결과 태스크에 부울 조건의 산술 및/또는 비트 표현식을 곱하는 동작을 포함할 수 있다. 부울 조건은 산술문으로서 공식화되는 대체 태스크를 포함할 수 있고, 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하는 동작은 결과 태스크에 1 빼기 부울 조건의 산술 및/또는 비트 표현식을 곱하는 동작을 포함할 수 있다.
부울 조건은 비산술문으로서 공식화되는 결과 태스크를 포함할 수 있고, 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 생성하는 동작은, 컴퓨터 프로그램의 산술 및/또는 비트 표현식에, 부울 조건의 산술 및/또는 비트 표현식에 연관되는 라벨로의 무조건 점프를 포함시키는 동작을 포함할 수 있다. 또한, 라벨은 부울 조건의 산술 및/또는 비트 표현식의 값이 1과 동일할 때 결과 태스크의 문의 시작과 동일할 수 있다. 더구나, 부울 조건은 부울 조건은 비-산술문으로서 공식화되는 대체 태스크를 포함하며, 라벨은 부울 조건의 산술 및/또는 비트 표현식의 값이 0과 동일할 때 대체 태스크의 문의 시작과 동일하다.
일부 실시예들에서, 그 방법은 산술 및/또는 비트 연산 유닛에 의해, 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 실행하는 동작을 더 포함한다. 일부 실시예들에서, 적어도 변환하는 동작은 제1 컴퓨터에 의해 수행되고, 실행하는 동작은 제2 컴퓨터에 의해 수행된다. 일부 실시예들에서, 변환하는 동작과 실행하는 동작은 동일한 컴퓨터에 의해 수행된다.
일부 실시예들은 적어도 하나의 제어 유닛, 적어도 하나의 산술 및/또는 비트 연산 유닛, 및 적어도 하나의 레지스터 유닛을 포함하는 하나 이상의 명령 프로세싱 유닛들; 및 하나 이상의 명령 프로세싱 유닛들에 커플링되는 하나 이상의 메모리 유닛들을 포함하는 시스템을 포함하며; 시스템은 실질적으로 모든 조건문들을 수행하도록 구성되며, 각각의 조건문은 적어도 하나의 산술 및/또는 비트 연산 유닛을 사용하여 실질적으로 모든 조건문들의 부울 조건들의 산술 및/또는 비트 표현식들을 실행함으로써 컴퓨터 프로그램에 부울 조건을 포함시킨다. 이러한 시스템 실시예들에서, 적어도 하나의 제어 유닛 또는 시스템의 별도의 데이터 프로세싱 장치는 위의 방법 실시예들 중 임의의 것의 방법 동작들을 수행하도록 구성될 수 있고, 프로세서의 적어도 하나의 산술 및/또는 비트 연산 유닛은 컴퓨터 프로그램의 산술 및/또는 비트 표현식을 실행하도록 구성되는 하나 이상의 명령 프로세싱 유닛들을 포함할 수 있다. 더구나, 적어도 하나의 산술 및/또는 비트 연산 유닛은 산술 블록, 비트 시프트 블록, 및 비트 로직 블록 중 하나 이상을 포함할 수 있고, 적어도 하나의 산술 및/또는 비트 연산 유닛은 임의의 디지털 비교기를 포함할 필요가 없다.
이 명세서에서 설명되는 발명의 주제의 실시예들 및 기능적 동작들은, 이 명세서에서 개시되는 구조들과 그것들의 구조적 동등물들을 포함하여, 디지털 전자 회로부에서, 유형으로 수록되는 컴퓨터 소프트웨어 또는 펌웨어에서, 컴퓨터 하드웨어에서, 또는 그것들 중 하나 이상의 것들의 조합들에서 구현될 수 있다. 이 명세서에서 설명되는 발명의 주제의 실시예들은 데이터 프로세싱 장치에 의한 실행을 위해 유형의 비일시적 저장 매체 상에 인코딩되는 컴퓨터 프로그램 명령들의 하나 이상의 모듈들로서, 또는 데이터 프로세싱 장치의 동작을 제어하기 위해 구현될 수 있다. 컴퓨터 저장 매체는 머신 판독가능 저장 디바이스, 머신 판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 그것들 중 하나 이상의 조합일 수 있다. 대안적으로 또는 추가적으로, 프로그램 명령들은 데이터 프로세싱 장치에 의한 실행을 위해 적합한 수신기 장치로의 송신을 위한 정보를 인코딩하도록 생성되는 인위적으로 생성된 전파되는 신호, 예컨대, 머신 생성된 전기, 광학적, 또는 전자기 신호 상에 인코딩될 수 있다.
"데이터 프로세싱 장치"라는 용어는, 데이터 프로세싱 하드웨어라고 지칭되고, 예로서 프로그램가능 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 포함하는, 데이터를 프로세싱하는 모든 종류들의 장치, 디바이스들, 및 머신들을 포괄한다. 그 장치는 또한, 주문형 집적회로, 예컨대, FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)일 수 있거나, 또는 그러한 것을 포함할 수 있다. 그 장치는 옵션적으로, 하드웨어 외에도, 컴퓨터 프로그램들을 위한 실행 환경을 생성하는 코드, 예컨대, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 그것들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
프로그램, 소프트웨어, 소프트웨어 애플리케이션, 앱, 모듈, 소프트웨어 모듈, 스크립트 , 또는 코드라고 또한 지칭될 수도 있거나 또는 그러한 것으로서 설명될 수도 있는 컴퓨터 프로그램이 컴파일 또는 인터프리트 언어들, 또는 선언적 또는 절차적 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 기입될 수 있고, 자립형 프로그램으로서 또는 모듈, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에서 사용하기에 적합한 다른 유닛으로서 포함하는 임의의 형태로 전개될 수 있다. 프로그램은 파일 시스템에서의 파일에 해당할 수도 있지만, 반드시 해당할 필요는 없을 수도 있다. 프로그램이 다른 프로그램들 또는 데이터를 보유하는 파일의 부분, 예컨대, 마크업 언어 문서로 저장되는 하나 이상의 스크립트들에, 해당 프로그램에 전용되는 단일 파일에, 또는 다수의 조정된 파일들, 예컨대, 코드의 하나 이상의 모듈들, 서브프로그램들, 또는 부분들을 저장하는 파일들에 저장될 수 있다. 컴퓨터 프로그램이 하나의 컴퓨터 상에서 또는 하나의 사이트에 위치되거나 또는 다수의 사이트들에 걸쳐 분산되고 데이터 통신 네트워크에 의해 상호연결되는 다수의 컴퓨터들 상에서 실행되도록 전개될 수도 있다.
하나 이상의 컴퓨터들의 시스템이 특정 동작들 또는 액션들을 수행하도록 구성되는 경우는 시스템이 자신 상에 동작 시 시스템이 동작들 또는 액션들을 수행하게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 그것들의 조합을 설치했음을 의미한다. 하나 이상의 컴퓨터 프로그램들이 특정 동작들 또는 액션들을 수행하도록 구성되는 경우는 하나 이상의 프로그램들이 데이터 프로세싱 장치에 의해 실행될 때, 장치가 동작들 또는 액션들을 수행하게 하는 명령들을 포함한다는 것을 의미한다.
이 명세서에서 사용되는 바와 같이, "엔진", 또는 "소프트웨어 엔진"은 입력과는 상이한 출력을 제공하는 소프트웨어에 의해 구현된 입출력 시스템을 지칭한다. 엔진이 can be 인코딩된 기능성 블록, 이를테면 라이브러리, 플랫폼, 소프트웨어 개발 키트(software development kit)("SDK"), 또는 개체일 수 있다. 각각의 엔진은 하나 이상의 프로세서들 및 컴퓨터 판독가능 매체를 포함하는 임의의 적절한 유형의 컴퓨팅 디바이스, 예컨대, 서버들, 모바일 폰들, 태블릿 컴퓨터들, 노트북 컴퓨터들, 뮤직 플레이어들, 전자책 리더들, 랩톱 또는 데스크톱 컴퓨터들, PDA들, 스마트 폰들, 또는 다른 정적 또는 휴대용 디바이스들 상에 구현될 수 있다. 추가적으로, 엔진들 중 둘 이상은 동일한 컴퓨팅 디바이스 상에, 또는 상이한 컴퓨팅 디바이스 상에 구현될 수도 있다.
이 명세서에서 설명되는 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하고 출력을 생성함으로써 기능들을 수행하도록 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그램가능 컴퓨터들에 의해 수행될 수 있다. 그 프로세스들 및 로직 흐름들은 특수 목적 로직 회로부, 예컨대, FPGA 또는 ASIC에 의해, 또는 특수 목적 로직 회로부 및 하나 이상의 프로그래밍된 컴퓨터들의 조합에 의해 또한 수행될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터들은 일반 또는 특수 목적 마이크로프로세서들 또는 양쪽 모두, 또는 임의의 다른 종류의 중앙 프로세싱 유닛에 기초할 수 있다. 일반적으로, 중앙 프로세싱 유닛이 판독전용 메모리 또는 랜덤 액세스 메모리 또는 둘 다로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 필수적인 엘리먼트들은 명령들을 수행 또는 실행하기 위한 중앙 프로세싱 유닛과 명령들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 중앙 프로세싱 유닛 및 메모리는 특수 목적 로직 회로부에 의해 보완될 수 있거나, 또는 특수 목적 로직 회로부에 통합될 수 있다. 일반적으로, 컴퓨터가 또한 데이터를 저장하기 위한 하나 이상의 대용량 스토리지 디바이스들, 예컨대, 자기, 광자기 디스크들, 또는 광학적 디스크들을 포함하거나, 또는 그러한 디바이스들에 대해 데이터를 수신하거나 또는 데이터를 전송하거나 또는 둘 다를 하도록 동작적으로 커플링될 것이다. 그러나, 컴퓨터가 이러한 디바이스들을 가질 필요는 없다. 더구나, 컴퓨터가 다른 디바이스, 예컨대, 단지 몇몇 이름을 들면, 모바일 전화기, 개인 정보 단말기(personal digital assistant, PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, 글로벌 포지셔닝 시스템(Global Positioning System, GPS) 수신기, 또는 휴대용 저장 디바이스, 예컨대, 유니버설 직렬 버스(universal serial bus, USB) 플래시 드라이브에 내장될 수 있다.
컴퓨터 프로그램 명령들 및 데이터를 저장하기 위한 컴퓨터 판독가능 매체는, 예로서 반도체 메모리 디바이스들, 예컨대, EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대, 내장형 하드 디스크들 또는 탈착식 디스크들; 광자기 디스크들; 그리고 CD ROM 및 DVD-ROM 디스크들을 포함하는 모든 형태들의 비휘발성 메모리, 매체 및 메모리 디바이스들을 포함한다.
사용자와의 상호작용을 제공하기 위해, 본 명세서에서 설명된 주제의 실시예들은 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스, 예컨대, CRT(cathode ray tube) 또는 LCD(liquid crystal display) 모니터와 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스, 예컨대, 마우스, 트랙볼, 또는 존재 감지 디스플레이 또는 다른 표면을 갖는 컴퓨터 상에 구현될 수 있다. 다른 종류들의 디바이스들은 사용자와의 상호작용을 위해서도 제공될 수 있으며; 예를 들어, 사용자에게 제공되는 피드백은 임의의 형태의 감각적 피드백, 예컨대, 시각적 피드백, 청각적 피드백, 또는 촉각적 피드백일 수 있고; 사용자로부터의 입력은 음향, 스피치, 또는 촉각 입력을 포함하는 임의의 형태로 수신될 수 있다. 추가적으로, 컴퓨터는 사용자에 의해 사용되는 디바이스에 문서들을 전송하고 그 디바이스로부터 문서들을 수신함으로써; 예를 들어, 웹 브라우저로부터 수신된 요청들에 응답하여 웹 페이지들을 사용자의 디바이스 상의 웹 브라우저에 전송함으로써 사용자와 상호작용할 수 있다. 또한, 텍스트 메시지들 또는 다른 형태들의 메시지를 메시징 애플리케이션을 실행하고 있는 개인용 디바이스, 예컨대, 스마트폰에 전송하고, 답신으로 응답 메시지들을 사용자로부터 수신함으로써 컴퓨터가 사용자와 상호작용할 수 있다.
이 명세서에서 설명되는 발명의 주제의 실시예들은, 백엔드 컴포넌트를, 예컨대, 데이터 서버로서 포함하는, 또는 미들웨어 컴포넌트, 예컨대, 애플리케이션 서버를 포함하는, 또는 프런트 엔드 컴포넌트, 예컨대, 그래픽 사용자 인터페이스, 웹 브라우저, 또는 사용자가 이 명세서에서 설명되는 발명의 주제의 구현예와 상호작용할 수 있는 앱을 갖는 클라이언트 컴퓨터를 포함하는 컴퓨팅 시스템, 또는 하나 이상의 이러한 백엔드, 미들웨어, 또는 프런트 엔드 컴포넌트들의 임의의 조합으로 구현될 수 있다. 시스템의 컴포넌트들은 임의의 형태 또는 매체의 디지털 데이터 통신, 예컨대, 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 로컬 영역 네트워크(local area network)(LAN)와 광역 네트워크(wide area network)(WAN), 예컨대, 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트들과 서버들을 포함할 수 있다. 클라이언트와 서버가 서로로부터 일반적으로 원거리에 있고 통상적으로는 통신 네트워크를 통해 상호작용한다. 클라이언트 및 서버의 관계는, 각각의 컴퓨터들 상에서 실행하고 있고 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들 덕분에 발생한다. 일부 실시예들에서, 서버가, 예컨대 클라이언트로서 역할을 하는 디바이스와 상호작용하는 사용자에게 데이터를 디스플레이하고 그 사용자로부터 사용자 입력을 수신할 목적으로, 데이터, 예컨대, HTML 페이지를 사용자 디바이스에게 송신한다. 사용자 디바이스에서 생성된 데이터, 예컨대, 사용자 상호작용의 결과가 디바이스로부터 서버에서 수신될 수 있다.
이 명세서는 많은 특정 구현 세부사항들을 포함하지만, 이것들은 임의의 본 발명의 범위에 대한, 또는 청구될 수도 있는 것의 범위에 대한 제한들로서 해석되지 않아야 하며, 오히려 특정한 본 발명들의 특정 실시예들에 특정될 수도 있는 특징들의 설명들로서 해석되어야 한다. 별개의 실시예들의 맥락에서 이 명세서에서 설명되는 특정한 특징들은 또한 단일 실시예에서 조합하여 구현될 수도 있다. 반대로, 단일 실시예의 맥락에서 설명되는 다양한 특징들은 다수의 실시예들에서 따로따로 또는 임의의 적합한 부조합(subcombination)으로 또한 구현될 수 있다. 더구나, 비록 특징들이 특정한 조합들로 작용하는 것으로 위에서 설명될 수도 있고 그와 같이 처음에 청구된 경우에도, 청구된 조합들로부터의 하나 이상의 특징들은 일부 경우들에서 조합으로부터 삭제될 수 있고, 청구된 조합은 부조합 또는 부조합의 변형예를 위한 것일 수도 있다.
마찬가지로, 동작들이 도면들에서 특정 순서로 묘사되었지만, 이는, 소망의 결과들을 획득하기 위해, 그런 동작들이 도시된 특정 순서로 또는 순차적 순서로 수행되는 것, 또는 모든 예시된 동작들이 수행될 것을 요구하는 것으로서 이해하지 않아야 한다. 특정한 환경들에서, 멀티태스킹 및 병렬 프로세싱이 유익할 수도 있다. 더구나, 위에서 설명된 실시예들에서 다양한 시스템 모듈들 및 컴포넌트들의 구분은 모든 실시예들에서 그러한 구분을 요구한다고 이해되지 않아야 하고, 설명된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품에 함께 통합될 수 있거나 또는 다수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다.
본 발명의 주제의 특정 실시예들이 설명되었다. 다른 실시예들은 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구범위에서 언급되는 액션들은 상이한 순서로 수행되고 여전히 바람직한 결과들을 성취할 수 있다. 하나의 예로서, 첨부 도면들에 묘사된 프로세스들은 바람직한 결과들을 성취하기 위해 도시된 특정 순서, 또는 순차적 순서를 반드시 필요로 하지는 않는다. 예를 들어, 동작들(1420 및 1425)은 도 14의 동작 1415를 뒤따를 필요가 없으며; 일부 구현예들에서 동작들(1420 및 1425)은 동작 1415 전에 수행된다. 더욱이, 일부 경우들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수도 있다.
Claims (35)
- 방법에 있어서,
컴퓨터 프로그램 ― 상기 컴퓨터 프로그램은 부울 조건을 포함하는 조건문을 포함함 ― 에 액세스하는 단계;
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계;
상기 부울 조건 대신에 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 포함하는 상기 컴퓨터 프로그램의 산술 표현식 및 비트 표현식 중 적어도 하나를 생성하는 단계; 및
상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나 ― 상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나는 프로세서의 산술 연산 유닛 및 비트 연산 유닛 중 적어도 하나에 의해 실행되도록 구성됨 ― 를 제공하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나는,
상기 부울 조건이 검증되면, 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나는 1과 동일하며; 그리고
상기 부울 조건이 검증되지 않으면, 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나는 0과 동일하다
는 것을 검증하는 것인, 방법. - 제1항에 있어서, 상기 부울 조건은 제1 변수(A)와 제2 변수(B)를 취하며,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
A에서 B를 빼는 단계;
A에서 B를 뺀 결과의 절대 값을 컴퓨팅하는 단계;
상기 A에서 B를 뺀 결과의 절대 값에 기초하여 지수를 컴퓨팅하는 단계;
컴퓨팅된 지수에 의한 기수의 지수화에 의해 지수를 컴퓨팅하는 단계; 및
상기 지수를 상기 기수로 나눈 나머지에 기초하여 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 부울 조건은 A = B이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
상기 A에서 B를 뺀 결과의 상기 절대 값으로서 상기 지수를 컴퓨팅하는 단계; 및
상기 지수를 상기 기수로 나눈 상기 나머지로서, 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 부울 조건은 A ≥ B이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
상기 A에서 B를 뺀 결과의 상기 절대 값에서, 상기 A에서 B를 뺀 상기 결과를 감산하는 단계;
상기 A에서 B를 뺀 결과의 상기 절대 값에서 상기 A에서 B를 뺀 상기 결과를 감산한 결과의 절대값으로서 상기 지수를 컴퓨팅하는 단계; 및
상기 지수를 상기 기수로 나눈 상기 나머지로서 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 부울 조건은 A < B이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
상기 A에서 B를 뺀 결과의 상기 절대 값에서, 상기 A에서 B를 뺀 상기 결과를 감산하는 단계;
상기 A에서 B를 뺀 결과의 상기 절대 값에서 상기 A에서 B를 뺀 상기 결과를 감산한 결과의 절대값으로서 상기 지수를 컴퓨팅하는 단계;
상기 지수에 의한 상기 기수의 지수화에 의해 상기 지수를 컴퓨팅하는 단계; 및
1 빼기 상기 지수를 상기 기수로 나눈 상기 나머지로서, 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 부울 조건은 A = B이며, 상기 제1 및 제2 변수들(A 및 B)은 부동소수점형 데이터이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
상기 A에서 B를 뺀 결과의 상기 절대 값에 적용된 천장 함수의 결과로서 상기 지수를 컴퓨팅하는 단계; 및
상기 지수를 상기 기수로 나눈 상기 나머지로서 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 부울 조건은 A ≥ B이며, 상기 제1 및 제2 변수들(A 및 B)은 부동소수점형 데이터이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
상기 A에서 B를 뺀 결과의 상기 절대 값에서 상기 A에서 B를 뺀 상기 결과를 감산하는 단계;
상기 A에서 B를 뺀 결과의 상기 절대 값에서 상기 A에서 B를 뺀 상기 결과를 감산한 결과의 절대값에 적용되는 천장 함수의 결과로서 상기 지수를 컴퓨팅하는 단계; 및
상기 지수를 상기 기수로 나눈 상기 나머지로서 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 부울 조건은 A < B이며, 상기 제1 및 제2 변수들(A 및 B)은 부동소수점형 데이터이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
상기 A에서 B를 뺀 결과의 상기 절대 값에서 상기 A에서 B를 뺀 상기 결과를 감산하는 단계;
상기 A에서 B를 뺀 결과의 상기 절대 값에서 상기 A에서 B를 뺀 상기 결과를 감산한 결과의 절대값에 적용되는 천장 함수의 결과로서 상기 지수를 컴퓨팅하는 단계;
상기 지수에 의한 상기 기수의 지수화에 의해 상기 지수를 컴퓨팅하는 단계; 및
1 빼기 상기 지수를 상기 기수로 나눈 상기 나머지로서 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 제1 및 제2 변수들(A 및 B)은 부울형 데이터이며, 상기 부울 조건은 A = B이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
A와 B의 합을 컴퓨팅하는 단계; 및
1 빼기 상기 합을 상기 기수로 나눈 상기 나머지로서 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 제1 및 제2 변수들(A 및 B)은 행렬형 데이터이고,
상기 방법은,
상기 제1 및 제2 변수들(A 및 B)의 각각을 각각 상기 제1 변수(A)의 제1 2원소 쌍들 및 상기 제2 변수(B)의 제2 2원소 쌍들로 분할하는 단계; 및
수열의 구성원들 사이의 차이가 증가하는 수열로부터의 대표 숫자들을 사용하여, 비교를 위해, 상기 제1 및 제2 변수들(A 및 B)의 각각의 더 작은 버전들을 형성하는 단계를 포함하며,
상기 제1 변수(A)의 상기 더 작은 버전에 대한 상기 대표 숫자들의 각각은 상기 제1 변수(A)의 상기 제1 2원소 쌍들에서의 데이터 값들과 동일한 상기 수열에서의 인덱스들을 갖는 상기 수열의 각각의 구성원들로부터 컴퓨팅되며;
상기 제2 변수(B)의 상기 더 작은 버전에 대한 상기 대표 숫자들의 각각은 상기 제2 변수(B)의 상기 제2 2원소 쌍들에서의 데이터 값들과 동일한 상기 수열에서의 인덱스들을 갖는 상기 수열의 각각의 구성원들로부터 컴퓨팅되며; 그리고
상기 방법은, 상기 제1 및 제2 변수들(A 및 B)의 각각이 홀수의 원소들을 가질 때, 상기 분할하는 단계 전에 상기 제1 및 제2 변수들(A 및 B)의 각각으로부터 단일 원소를 제거하고, 상기 제1 및 제2 변수들(A 및 B)의 각각으로부터의 상기 단일 원소를 상기 제1 및 제2 변수들(A 및 B)의 상기 더 작은 버전들에 각각 더하는 단계를 포함하는 것인, 방법. - 제11항에 있어서, 상기 형성하는 단계는,
상기 제1 변수(A)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제1 변수(A)의 상기 제1 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개를 합산함으로써, 상기 제1 변수(A)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계; 및
상기 제2 변수(B)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제2 변수(B)의 상기 제2 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개를 합산함으로써, 상기 제2 변수(B)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제11항에 있어서, 상기 제1 및 제2 변수들(A 및 B)의 각각을 정렬하는 단계를 포함하며,
행렬형 데이터 변수의 상기 정렬하는 단계는,
상기 행렬형 데이터 변수로서 동일한 수의 원소들을 갖는 새로운 변수를 인스턴스화하는 단계;
상기 행렬형 데이터 변수를 상기 정렬을 수행하기 위해 사용되는 프로세싱될 스레드들의 수와 동일한 수의 하위 부분들로 나누는 단계;
상기 각각의 프로세싱 스레드들의 각각에 의해, 상기 하위 부분의 각각의 원소의 값을 상기 행렬형 데이터 변수에서의 다른 모든 값들과 비교하고 상기 행렬형 데이터 변수의 얼마나 많은 원소들이, 역 위치 인덱스에 대해, 상기 하위 부분의 비교된 원소보다 작은지, 또는 큰지를 카운트함으로써, 상기 프로세싱 스레드에 의해 처리되는 상기 하위 부분에서의 각각의 원소에 대한 위치 인덱스를 결정하는 단계;
오름 차순 또는 내림 차순 중 어느 하나로, 상기 프로세싱 스레드들에 의해 결정되는 상기 위치 인덱스들에 따라 상기 행렬형 데이터 변수로부터의 값들로 상기 새로운 변수에서의 값들을 대체하는 단계; 및
상기 정렬이 오름 차순인지 또는 내림 차순인지에 의존하여, 상기 새로운 변수에서의 좌측 인접 원소 값 또는 우측 인접 원소 값 중 어느 하나로 상기 새로운 변수에서의 임의의 남아 있는 비변경된 값들을 대체하는 단계를 포함하며,
상기 새로운 변수는 상기 행렬형 데이터 변수의 정렬된 버전으로서 사용되는 것인, 방법. - 제11항에 있어서,
상기 제1 변수(A)의 상기 제1 2원소 쌍들에 대한 제1 위치 변수들을 컴퓨팅하는 단계; 및
상기 제2 변수(B)의 상기 제2 2원소 쌍들에 대한 제2 위치 변수들을 컴퓨팅하는 단계를 포함하며,
원소 쌍에 대한 각각의 위치 변수를 컴퓨팅하는 단계는 부울 조건 Y > X의 결과에 의한 음수 1과 동일한 숫자의 지수화를 포함하며, X는 상기 원소 쌍에서의 제1 원소이고, Y는 상기 원소 쌍에서의 제2 원소이며; 그리고
상기 형성하는 단계는,
상기 제1 변수(A)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제1 위치 변수들 중 하나에 상기 제1 변수(A)의 상기 제1 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개의 합을 곱함으로써, 상기 제1 변수(A)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계, 및
상기 제2 변수(B)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제2 위치 변수들 중 하나에 상기 제2 변수(B)의 상기 제2 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개의 합을 곱함으로써, 상기 제2 변수(B)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제3항에 있어서, 상기 기수는 2와 동일하며, 상기 프로세서는 이진법을 사용하고, 상기 지수를 상기 기수로 나눈 상기 나머지는 상기 지수의 마지막 비트를 취함으로써 추출되는 것인, 방법.
- 제3항에 있어서, 상기 프로세서는 이진법을 사용하고, 상기 컴퓨팅된 지수에 의한 상기 기수의 상기 지수화는 1과 동일한 비트를 상기 컴퓨팅된 지수와 동일한 자리수만큼 좌측으로 자리이동함으로써 수행되는 것인, 방법.
- 제1항에 있어서, 상기 부울 조건은 A < B이고,
상기 부울 조건을 상기 부울 조건의 산술 표현식 및 비트 표현식 중 적어도 하나로 변환하는 단계는,
A에서 B를 빼는 단계; 및
A에서 B를 뺀 결과의 빌린 값으로서, 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제1항에 있어서, 상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 제공하는 단계는,
상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 산술 표현식 및 비트 표현식 중 적어도 하나의 다수의 단편들로 단편화하는 단계를 포함하고,
상기 산술 표현식 및 비트 표현식 중 적어도 하나의 단편들은 병렬로 실행되도록 구성되는 것인, 방법. - 제2항에 있어서, 상기 부울 조건은 산술문으로서 공식화되는 결과 태스크를 포함하고,
상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 생성하는 단계는,
상기 결과 태스크와 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 곱하는 단계를 포함하는 것인, 방법. - 제19항에 있어서, 상기 부울 조건은 산술문으로서 공식화되는 대체 태스크를 포함하고,
상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 생성하는 단계는,
상기 대체 태스크와, 1 빼기 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 곱하는 단계를 포함하는 것인, 방법. - 제2항에 있어서, 상기 부울 조건은 비산술문으로서 공식화되는 결과 태스크를 포함하고,
상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 생성하는 단계는,
상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나에, 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나에 연관되는 라벨로의 무조건 점프를 포함시키는 단계를 포함하는 것인, 방법. - 제21항에 있어서, 상기 라벨은 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나의 값이 1과 동일할 때 상기 결과 태스크의 문(statement)의 시작과 동일한 것인, 방법.
- 제22항에 있어서, 상기 부울 조건은 비산술문으로서 공식화되는 대체 태스크를 포함하며,
상기 라벨은 상기 부울 조건의 상기 산술 표현식 및 비트 표현식 중 적어도 하나의 상기 값이 0과 동일할 때 상기 대체 태스크의 문의 시작과 동일한 것인, 방법. - 제1항에 있어서,
상기 산술 연산 유닛 및 비트 연산 유닛 중 적어도 하나에 의해, 상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 실행하는 단계를 더 포함하는, 방법. - 제24항에 있어서, 적어도 상기 변환하는 단계는 제1 컴퓨터에 의해 수행되고, 상기 실행하는 단계는 제2 컴퓨터에 의해 수행되는 것인, 방법.
- 제24항에 있어서, 상기 변환하는 단계과 상기 실행하는 단계는 동일한 컴퓨터에 의해 수행되는 것인, 방법.
- 시스템에 있어서,
적어도 하나의 제어 유닛, 적어도 하나의 산술 또는 비트 연산 유닛, 및 적어도 하나의 레지스터 유닛을 포함하는 하나 이상의 명령 프로세싱 유닛들; 및
상기 하나 이상의 명령 프로세싱 유닛들에 커플링되는 하나 이상의 메모리 유닛들을 포함하며,
상기 시스템은 실질적으로 모든 조건문들을 수행하도록 구성되며, 각각의 조건문은 상기 적어도 하나의 산술 또는 비트 연산 유닛을 사용하여 상기 실질적으로 모든 조건문들의 부울 조건들의 산술 표현식 및 비트 표현식 중 적어도 하나를 실행함으로써 컴퓨터 프로그램에 부울 조건을 포함시키는 것인, 시스템. - 제27항에 있어서, 상기 적어도 하나의 제어 유닛 또는 상기 시스템의 별도의 데이터 프로세싱 장치는 제1항 내지 제26항 중 어느 한 항의 방법 단계들을 수행하도록 구성되고, 상기 하나 이상의 명령 프로세싱 유닛들을 포함하는 상기 프로세서의 상기 적어도 하나의 산술 또는 비트 연산 유닛은 상기 컴퓨터 프로그램의 상기 산술 표현식 및 비트 표현식 중 적어도 하나를 실행하도록 구성되는 것인, 시스템.
- 제27항에 있어서, 상기 적어도 하나의 산술 또는 비트 연산 유닛은, 산술 블록, 비트 시프트 블록, 및 비트 로직 블록 중 하나 이상을 포함하고, 상기 적어도 하나의 산술 또는 비트 연산 유닛은 임의의 디지털 비교기를 포함하지 않는 것인, 시스템.
- 방법에 있어서,
제1 변수(A) 및 제2 변수(B) ― 상기 제1 및 제2 변수들(A 및 B)의 각각은 행렬형 데이터를 포함함 ― 를 비교하는 부울 조건을 포함하는 조건문을 포함하는 컴퓨터 프로그램에 액세스하는 단계;
상기 제1 및 제2 변수들(A 및 B)의 각각을 각각 상기 제1 변수(A)의 제1 2원소 쌍들 및 상기 제2 변수(B)의 제2 2원소 쌍들로 분할하는 단계; 및
수열의 구성원들 사이의 차이가 증가하는 수열로부터의 대표 숫자들을 사용하여, 비교를 위해, 상기 제1 및 제2 변수들(A 및 B)의 각각의 더 작은 버전들 ― 상기 제1 변수(A)의 상기 더 작은 버전에 대한 상기 대표 숫자들의 각각은, 상기 제1 변수(A)의 상기 제1 2원소 쌍들에서의 데이터 값들과 동일한 상기 수열에서의 인덱스들을 갖는 상기 수열의 각각의 구성원들로부터 컴퓨팅되며, 상기 제2 변수(B)의 상기 더 작은 버전에 대한 상기 대표 숫자들의 각각은 상기 제2 변수(B)의 상기 제2 2원소 쌍들에서의 데이터 값들과 동일한 상기 수열에서의 인덱스들을 갖는 상기 수열의 각각의 구성원들로부터 컴퓨팅되고, 상기 제1 및 제2 변수들(A 및 B)의 각각이 홀수의 원소들을 가질 때,
상기 분할하는 단계 전에 상기 제1 및 제2 변수들(A 및 B)의 각각으로부터 단일 원소를 제거하고,
상기 제1 및 제2 변수들(A 및 B)의 각각으로부터의 상기 단일 원소를 상기 제1 및 제2 변수들(A 및 B)의 상기 더 작은 버전들에 각각 더함 ― 을 형성하는 단계; 및
상기 컴퓨터 프로그램을 실행할 때 상기 조건문의 상기 부울 조건을 평가하기 위해 상기 제1 및 제2 변수들(A 및 B)의 상기 더 작은 버전들을 비교하는 단계를 포함하는, 방법. - 제30항에 있어서, 상기 형성하는 단계는,
상기 제1 변수(A)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제1 변수(A)의 상기 제1 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개를 합산함으로써, 상기 제1 변수(A)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계; 및
상기 제2 변수(B)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제2 변수(B)의 상기 제2 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개를 합산함으로써, 상기 제2 변수(B)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계를 포함하는 것인, 방법. - 제30항에 있어서,
상기 제1 변수(A)의 상기 제1 2원소 쌍들에 대한 제1 위치 변수들을 컴퓨팅하는 단계; 및
상기 제2 변수(B)의 상기 제2 2원소 쌍들에 대한 제2 위치 변수들을 컴퓨팅하는 단계를 포함하며,
원소 쌍에 대한 각각의 위치 변수를 컴퓨팅하는 단계는 부울 조건 Y > X의 결과에 의한 음수 1과 동일한 숫자의 지수화를 포함하며, X는 상기 원소 쌍에서의 제1 원소이고, Y는 상기 원소 쌍에서의 제2 원소이며; 그리고
상기 형성하는 단계는,
상기 제1 변수(A)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제1 위치 변수들 중 하나에 상기 제1 변수(A)의 상기 제1 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개의 합을 곱함으로써 상기 제1 변수(A)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계, 및
상기 제2 변수(B)의 상기 더 작은 버전의 각각의 원소에 대해, 상기 제2 위치 변수들 중 하나에 상기 제2 변수(B)의 상기 제2 2원소 쌍들에서의 상기 데이터 값들에 대응하는 상기 수열의 상기 각각의 구성원들 중 두 개의 합을 곱함으로써 상기 제2 변수(B)의 상기 더 작은 버전에 대한 상기 대표 숫자들을 컴퓨팅하는 단계를 포함하는 것인, 방법. - 시스템에 있어서,
적어도 하나의 제어 유닛, 적어도 하나의 산술 또는 비트 연산 유닛, 및 적어도 하나의 레지스터 유닛을 포함하는 하나 이상의 명령 프로세싱 유닛들; 및
상기 하나 이상의 명령 프로세싱 유닛들에 커플링되는 하나 이상의 메모리 유닛들을 포함하며,
상기 하나 이상의 메모리 유닛들은 상기 하나 이상의 명령 프로세싱 유닛들이 제30항 내지 제32항 중 어느 한 항의 방법 단계들을 수행하게 하도록 구성되는 것인, 시스템. - 행렬형 데이터 개체를 정렬하는 방법에 있어서,
상기 행렬형 데이터 개체로서 동일한 수의 원소들을 갖는 새로운 개체를 인스턴스화하는 단계;
상기 행렬형 데이터 개체를 상기 정렬을 수행하기 위해 사용되는 프로세싱될 스레드들의 수와 동일한 수의 하위 부분들로 나누는 단계;
상기 각각의 프로세싱 스레드들 중 각각의 프로세싱 스레드에 의해, 상기 하위 부분의 각각의 원소의 값을 상기 행렬형 데이터 개체에서의 다른 모든 값들과 비교하고 상기 행렬형 데이터 개체의 얼마나 많은 원소들이, 역 위치 인덱스에 대해, 상기 하위 부분의 비교된 원소보다 작은지, 또는 큰지를 카운트함으로써, 상기 프로세싱 스레드에 의해 처리되는 상기 하위 부분에서의 각각의 원소에 대한 위치 인덱스를 결정하는 단계 ― 상기 결정하는 단계는 제1항 내지 제12항 및 제14항 내지 제26항 중 어느 한 항의 방법을 수행하는 단계를 포함함 ―;
오름 차순 또는 내림 차순 중 어느 하나로, 상기 프로세싱 스레드들에 의해 결정되는 상기 위치 인덱스들에 따라 상기 행렬형 데이터 개체로부터의 값들로 상기 새로운 개체에서의 값들을 대체하는 단계; 및
상기 정렬이 오름 차순인지 또는 내림 차순인지에 의존하여, 상기 새로운 개체 ― 상기 새로운 개체는 상기 행렬형 데이터 개체의 정렬된 버전으로서 사용됨 ― 에서의 좌측 인접 원소 값 또는 우측 인접 원소 값 중 어느 하나로 상기 새로운 개체에서의 임의의 남아 있는 비변경된 값들을 대체하는 단계를 포함하는, 행렬형 데이터 개체를 정렬하는 방법. - 시스템에 있어서,
적어도 하나의 제어 유닛, 적어도 하나의 산술 또는 비트 연산 유닛, 및 적어도 하나의 레지스터 유닛을 포함하는 하나 이상의 명령 프로세싱 유닛들; 및
상기 하나 이상의 명령 프로세싱 유닛들에 커플링되는 하나 이상의 메모리 유닛들을 포함하며,
상기 하나 이상의 메모리 유닛들은 상기 하나 이상의 명령 프로세싱 유닛들이 제34항의 방법 단계들을 수행하게 하도록 구성되는 것인, 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/076,726 | 2020-10-21 | ||
US17/076,726 US11029920B1 (en) | 2020-10-21 | 2020-10-21 | Execution of a conditional statement by an arithmetic and/or bitwise unit |
PCT/US2021/031996 WO2022086594A1 (en) | 2020-10-21 | 2021-05-12 | Execution of a conditional statement by an arithmetic and/or bitwise unit |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220054248A true KR20220054248A (ko) | 2022-05-02 |
Family
ID=76213270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217043317A KR20220054248A (ko) | 2020-10-21 | 2021-05-12 | 산술 및/또는 비트 유닛에 의한 조건문의 실행 |
Country Status (10)
Country | Link |
---|---|
US (1) | US11029920B1 (ko) |
EP (1) | EP4058885B1 (ko) |
JP (1) | JP7341258B2 (ko) |
KR (1) | KR20220054248A (ko) |
CN (1) | CN114902176A (ko) |
CA (1) | CA3192952A1 (ko) |
IL (1) | IL301192A (ko) |
MX (1) | MX2023002986A (ko) |
TW (2) | TWI786879B (ko) |
WO (1) | WO2022086594A1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12099462B1 (en) | 2023-12-08 | 2024-09-24 | Chariot Technologies Lab, Inc. | Dynamic processor architecture |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578133B1 (en) | 2000-02-24 | 2003-06-10 | Stanley M. Hyduke | MIMD array of single bit processors for processing logic equations in strict sequential order |
US7523151B1 (en) | 2000-05-12 | 2009-04-21 | The Athena Group, Inc. | Method and apparatus for performing computations using residue arithmetic |
GB0013355D0 (en) | 2000-06-01 | 2000-07-26 | Tao Group Ltd | Parallel modulo arithmetic using bitwise logical operations |
EP1947584B1 (en) * | 2006-12-21 | 2009-05-27 | Telefonaktiebolaget LM Ericsson (publ) | Obfuscating computer program code |
US8752032B2 (en) * | 2007-02-23 | 2014-06-10 | Irdeto Canada Corporation | System and method of interlocking to protect software-mediated program and device behaviours |
JP2008305185A (ja) * | 2007-06-07 | 2008-12-18 | Nec Electronics Corp | プロセッサ装置及び複合条件処理方法 |
US8782599B2 (en) | 2008-06-26 | 2014-07-15 | Invensys Systems, Inc. | Multi-mode editor for configuring process control blocks including both logical functions and arithmetic computations |
JP2011197951A (ja) * | 2010-03-18 | 2011-10-06 | Canon Inc | 画像処理装置及び画像処理方法 |
JP2015201119A (ja) * | 2014-04-10 | 2015-11-12 | 富士通株式会社 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
US9460075B2 (en) | 2014-06-17 | 2016-10-04 | International Business Machines Corporation | Solving and answering arithmetic and algebraic problems using natural language processing |
CN106406810B (zh) * | 2014-07-02 | 2019-08-06 | 上海兆芯集成电路有限公司 | 微处理器及其方法 |
US9588765B2 (en) | 2014-09-26 | 2017-03-07 | Intel Corporation | Instruction and logic for multiplier selectors for merging math functions |
WO2017136431A1 (en) | 2016-02-01 | 2017-08-10 | Microsoft Technology Licensing, Llc | Parameterizing and working with math equations in a spreadsheet application |
CN107291420B (zh) | 2017-06-27 | 2020-06-05 | 上海兆芯集成电路有限公司 | 整合算术及逻辑处理的装置 |
CN116790108A (zh) * | 2017-08-31 | 2023-09-22 | 卡比奥利司公司 | 包含酶的可生物降解的聚酯制品 |
SG11202004147RA (en) * | 2017-11-09 | 2020-06-29 | Nchain Holdings Ltd | System for securing verification key from alteration and verifying validity of a proof of correctness |
-
2020
- 2020-10-21 US US17/076,726 patent/US11029920B1/en active Active
-
2021
- 2021-05-12 EP EP21883464.6A patent/EP4058885B1/en active Active
- 2021-05-12 KR KR1020217043317A patent/KR20220054248A/ko not_active Application Discontinuation
- 2021-05-12 IL IL301192A patent/IL301192A/en unknown
- 2021-05-12 CA CA3192952A patent/CA3192952A1/en active Pending
- 2021-05-12 MX MX2023002986A patent/MX2023002986A/es unknown
- 2021-05-12 JP JP2021577389A patent/JP7341258B2/ja active Active
- 2021-05-12 WO PCT/US2021/031996 patent/WO2022086594A1/en unknown
- 2021-05-12 CN CN202180007729.XA patent/CN114902176A/zh active Pending
- 2021-10-14 TW TW110138115A patent/TWI786879B/zh active
- 2021-10-14 TW TW111140591A patent/TWI812524B/zh active
Also Published As
Publication number | Publication date |
---|---|
IL301192A (en) | 2023-05-01 |
JP2023501763A (ja) | 2023-01-19 |
WO2022086594A1 (en) | 2022-04-28 |
US11029920B1 (en) | 2021-06-08 |
EP4058885A4 (en) | 2023-01-11 |
CA3192952A1 (en) | 2022-04-28 |
TW202311935A (zh) | 2023-03-16 |
TWI812524B (zh) | 2023-08-11 |
TWI786879B (zh) | 2022-12-11 |
JP7341258B2 (ja) | 2023-09-08 |
MX2023002986A (es) | 2023-04-10 |
EP4058885A1 (en) | 2022-09-21 |
EP4058885C0 (en) | 2024-05-01 |
CN114902176A (zh) | 2022-08-12 |
TW202219739A (zh) | 2022-05-16 |
EP4058885B1 (en) | 2024-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107608715B (zh) | 用于执行人工神经网络正向运算的装置及方法 | |
US8745111B2 (en) | Methods and apparatuses for converting floating point representations | |
KR20200002607A (ko) | 구분적 선형 근사를 이용한 심층 뉴럴 네트워크 아키텍처 | |
JP2021525403A (ja) | 改良された低精度の2進浮動小数点形式設定 | |
Murillo et al. | Energy-efficient MAC units for fused posit arithmetic | |
CN112835551B (zh) | 用于处理单元的数据处理方法、电子设备和计算机可读存储介质 | |
WO2023124372A1 (zh) | 浮点数处理装置、方法、电子设备、存储介质及芯片 | |
WO2023124362A1 (zh) | 浮点数处理方法、装置、电子设备及存储介质 | |
US20060155796A1 (en) | System and methods for large-radix computer processing | |
CN115268832A (zh) | 浮点数取整的方法、装置以及电子设备 | |
TWI812524B (zh) | 藉由算數及/或逐位元單元執行條件敘述的方法及系統 | |
US20210334703A1 (en) | Methods and systems configured to specify resources for hyperdimensional computing implemented in programmable devices using a parameterized template for hyperdimensional computing | |
CN116610362B (zh) | 一种处理器指令集译码方法、系统、设备和存储介质 | |
US20220245433A1 (en) | Sparse convolutional neural network | |
US20230161555A1 (en) | System and method performing floating-point operations | |
US20230401420A1 (en) | Compiling asymmetrically-quantized neural network models for deep learning acceleration | |
Trivedi et al. | Hybrid ADDer: A viable solution for efficient design of MAC in DNNs | |
CN116700664B (zh) | 一种确定浮点数平方根的方法及装置 | |
US20230333849A1 (en) | Execution of a conditional statement by an arithmetic and/or bitwise unit | |
Lee et al. | Experiment and enabled flow for GPGPU-sim simulators with fixed-point instructions | |
Mora et al. | Mathematical model and implementation of rational processing | |
Khosravi et al. | Iterative construction of energy and quality-efficient approximate multipliers utilizing lower bit-length counterparts | |
US20230110383A1 (en) | Floating-point logarithmic number system scaling system for machine learning | |
Sabbagh Molahosseini et al. | Low-precision floating-point formats: From general-purpose to application-specific | |
Dietz | Wordless Integer and Floating-Point Computing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal |