맨위로가기

토마술로 알고리즘

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

토마술로 알고리즘은 명령어의 순차적 발행과 비순차적 실행을 가능하게 하여 프로세서의 성능을 향상시키는 하드웨어 기반 동적 스케줄링 기법이다. 이 알고리즘은 레지스터 이름 변경, 예약 스테이션, 공통 데이터 버스를 활용하여 데이터 종속성 문제를 해결하고, 명령어의 병렬 실행을 가능하게 한다. 명령어는 발행, 실행, 결과 쓰기의 세 단계를 거치며, 예약 스테이션은 각 명령어의 피연산자와 실행 정보를 저장하여 기능 유닛의 실행 시점을 결정한다. 토마술로 알고리즘은 캐시 미스에 대한 대처 능력이 뛰어나고, 다양한 파이프라인 구조에 적용 가능하며, 최신 프로세서, 특히 인텔의 x86-64 칩을 포함한 여러 프로세서에서 동적 스케줄링 방식으로 구현되어 널리 사용된다.

더 읽어볼만한 페이지

  • 명령어 처리 - 멀티스레딩
    멀티스레딩은 프로세스 내에서 여러 스레드를 동시 실행하여 처리 능력을 향상시키는 기술로, 응답성 향상과 자원 공유 등의 장점이 있지만, 자원 간섭과 소프트웨어 복잡성 증가 등의 단점도 존재하며, 다양한 모델과 구현 방식, 스레드 스케줄러, 가상 머신 활성화 가능성 등을 고려해야 한다.
  • 명령어 처리 - 마이크로아키텍처
    마이크로아키텍처는 명령어 집합 아키텍처를 구현하는 프로세서의 구성 요소, 상호 연결, 작동 방식을 포괄하는 개념으로, 동일 ISA에서 반도체 기술 발전과 새로운 구조 및 회로를 통해 성능 향상을 가능하게 한다.
  • 알고리즘 - 텍스트-비디오 모델
    텍스트-비디오 모델은 텍스트 입력을 기반으로 비디오를 생성하는 인공지능 모델로서, 다양한 모델들이 개발되고 교육, 홍보, 창작 산업 등 여러 분야에 활용되지만 컴퓨팅 자원 소모, 데이터 부족, 텍스트 해석 오류, 윤리적 문제 등의 한계점을 가진다.
  • 알고리즘 - 마스터 정리
    마스터 정리는 분할 정복 알고리즘의 시간 복잡도 분석 도구로서, 점화식을 세 가지 경우로 나누어 재귀 알고리즘의 효율성을 파악하고, 다양한 정렬 및 일반 알고리즘 분석에 활용되지만, 특정 조건에서는 적용이 제한될 수 있습니다.
토마술로 알고리즘
알고리즘 개요
종류컴퓨터 아키텍처 알고리즘
설계자로버트 마이클 토마술로(Robert Michael Tomasulo)
개발 년도1967년
발표 년도1967년
발표 학회AFIPS(American Federation of Information Processing Societies)
적용 분야컴퓨터 구조
명령어 스케줄링
동적 스케줄링
파이프라이닝
특징
주요 특징레지스터 이름 변경을 통한 RAW, WAR, WAW 데이터 의존성 제거
분산 제어 로직
정수 및 부동 소수점 연산 모두 지원
장점컴파일러 지원 없이도 높은 성능 달성
명령어 처리량 증가
정지 감소
단점복잡한 하드웨어 구조
더 많은 전력 소비
해결 과제정확한 예외 처리 구현
명령어 완료 순서 보장
작동 방식
명령어 실행 단계명령어 인출(Instruction Fetch, IF)
명령어 디코드(Instruction Decode, ID)
실행(Execute, EX)
메모리 접근(Memory Access, MEM)
기록(Write Back, WB)
주요 구성 요소예약 스테이션(Reservation Stations)
공통 데이터 버스(Common Data Bus, CDB)
레지스터 파일(Register File)
데이터 처리 흐름명령어 발행(Issue): 명령어와 피연산자를 예약 스테이션으로 보냄
실행(Execute): 필요한 피연산자를 기다린 후 연산 실행
결과 기록(Write Result): 결과를 CDB를 통해 레지스터 파일과 다른 예약 스테이션으로 보냄
구현
구현 방식하드웨어 기반
최적화 방법예약 스테이션의 크기 조정
CDB의 대역폭 증가
수상
수상 내역IEEE 컴퓨터 소사이어티 해리 H. 구드 기념상 (1995)
수상 이유동적 명령어 실행을 가능하게 한 알고리즘 개발 공헌
참고 자료
관련 논문An Efficient Algorithm for Exploiting Multiple Arithmetic Units(1967)
관련 인물
관련 인물제임스 E. 스미스(James E. Smith)

2. 구현 개념

토마술로 알고리즘을 구현하려면 다음과 같은 개념이 필요하다.


  • 명령어 순서(Instruction Order): 명령어는 순서대로 발행되지만, 실행은 순서대로 이루어지지 않는다. 명령어 시퀀스에 의해 발생된 예외와 같은 효과는 비순차적(아웃 오브 오더) 실행에도 불구하고 인오더 프로세서에서와 동일한 순서로 발생한다.[1]

  • 레지스터 이름 변경(Register Renaming): 레지스터 이름 변경을 사용하여 비순차적 실행을 올바르게 수행한다. 모든 범용 레지스터와 예약 스테이션 레지스터는 실제 값 또는 자리 표시자 값을 가진다. 발행 단계에서 대상 레지스터에 실제 값을 사용할 수 없는 경우, 초기에는 자리 표시자 값이 사용된다. 자리 표시자 값은 실제 값을 생성할 예약 스테이션을 나타내는 태그이다. 장치가 완료되어 공통 데이터 버스(CDB)에서 결과를 브로드캐스트하면 자리 표시자는 실제 값으로 바뀐다. 기능 유닛은 여러 슬롯으로 구성된 예약 스테이션을 사용하며, 각 슬롯은 연산 종류, 연산 대상 데이터 등 하나의 명령을 실행하는 데 필요한 정보를 보관한다. 기능 유닛은 명령어에 필요한 입력 데이터가 모두 "실제 값"이 되면 실행을 시작한다.

  • 예외(Exceptions): 명령어는 순차적으로 발행되므로, 명령어 시퀀스의 효과는 마치 순차적으로 실행되는 것처럼 보여야 한다. 예를 들어, 명령어에 의해 발생된 예외는 비순차적으로 실행되고 있다는 사실과 관계없이, 순차적 프로세서에서와 동일한 순서로 발생해야 한다.[1]
  • 정확 예외: 예외가 발생한 특정 명령을 결정할 수 있어 프로그램이 예외 지점에서 다시 시작하거나 재실행할 수 있다.[1]
  • 불정확 예외: 예외가 발생한 특정 명령을 결정할 수 없어 프로그램이 일반적으로 다시 시작하거나 재실행할 수 없다.[1]

2. 1. 공통 데이터 버스 (Common Data Bus, CDB)

공통 데이터 버스(CDB)는 예약 스테이션을 기능 유닛에 직접 연결한다. 토마술로 알고리즘에 따르면, 이는 "동시성을 장려하면서 우선 순위를 유지한다".[2] 이는 두 가지 중요한 영향을 미친다.

1. 기능 유닛은 부동 소수점 레지스터를 거치지 않고 모든 연산의 결과에 접근할 수 있으므로, 결과 대기를 위해 여러 유닛이 레지스터 파일 읽기 포트에 대한 경쟁 해결을 기다릴 필요 없이 진행할 수 있다.

2. 위험 감지 및 제어 실행이 분산된다. 예약 스테이션은 단일 전용 위험 유닛이 아닌, 명령이 언제 실행될 수 있는지를 제어한다.

실행 단계에서는 명령이 실제로 실행된다. 명령은 모든 피연산자가 사용 가능해질 때까지 대기하며, RAW 해저드를 발생시키지 않도록 한다. 메모리에 의한 해저드를 방지하기 위한 주소 연산 과정에서, 프로그램의 결과가 올바른 것이 보장된다.

  • 피연산자 데이터 중 사용할 수 없는 것이 있는 경우
  • 공통 데이터 버스(CDB)를 감시하여, 계산이 완료될 때까지 대기한다.
  • 피연산자 데이터가 사용 가능해지면, 해당 예약 스테이션에 이 데이터를 배치한다.
  • 피연산자 데이터가 모두 사용 가능해지면
  • 명령이 로드 또는 스토어인 경우
  • 베이스 주소가 사용 가능하면, 유효 주소를 계산한다.
  • 유효 주소를 로드 또는 스토어 버퍼에 저장한다.
  • 명령이 로드인 경우
  • 메모리 유닛이 사용 가능해지는 즉시, 명령을 실행한다.
  • 명령이 스토어인 경우
  • 메모리 유닛에 보내기 전에, 값이 저장될 때까지 대기한다.
  • 그 외의 경우에는, 산술 논리 연산 장치(ALU) 연산
  • 해당 기능 유닛에서 명령을 실행한다.


결과 쓰기 단계에서는, ALU 연산의 결과가 레지스터에 다시 쓰여지고, 저장 명령의 메모리 쓰기가 수행된다.

  • 명령이 ALU 연산인 경우
  • 결과가 사용 가능해지면
  • CDB에 쓰고, CDB로부터 결과를 기다리는 레지스터나 예약 스테이션에 쓴다.
  • 저장인 경우
  • 이 단계에서 데이터를 메모리에 쓴다.

2. 2. 명령어 순서 (Instruction Order)

명령어는 순차적으로 발행되므로, 이러한 명령에 의해 발생된 예외와 같은 명령 시퀀스의 효과는 아웃오브오더(즉, 비순차적으로) 실행되고 있다는 사실과 관계없이, 인오더 프로세서에서와 동일한 순서로 발생한다.[1]

2. 3. 레지스터 이름 변경 (Register Renaming)

토마술로 알고리즘은 레지스터 이름 변경을 사용하여 비순차적 실행을 올바르게 수행한다. 모든 범용 레지스터와 예약 스테이션 레지스터는 실제 값 또는 자리 표시자 값을 가진다. 발행 단계에서 대상 레지스터에 실제 값을 사용할 수 없는 경우, 초기에는 자리 표시자 값이 사용된다. 자리 표시자 값은 실제 값을 생성할 예약 스테이션을 나타내는 태그이다. 장치가 완료되어 CDB에서 결과를 브로드캐스트하면 자리 표시자는 실제 값으로 바뀐다.

각 기능 장치는 단일 예약 스테이션을 가진다. 예약 스테이션은 연산과 피연산자를 포함하여 단일 명령을 실행하는 데 필요한 정보를 보유한다. 기능 장치는 사용 가능하고, 명령에 필요한 모든 소스 피연산자가 실제 값일 때 처리를 시작한다.

토마술로 알고리즘 구현에 필요한 사항은 다음과 같다.

  • 명령어는 순서대로 발행되지만, 실행은 순서대로 이루어지지 않는다. 명령어 시퀀스가 미치는 결과(예외 발생 등)는 파이프라인화되지 않은 프로세서와 동일해야 한다.
  • 모든 범용 레지스터 및 예약 스테이션 레지스터는 "실제 값" 또는 "가상 값"을 저장한다. 명령어 발행 과정에서 연산 결과를 출력하는 레지스터를 사용할 수 없는 경우, 처음에는 가상 값이 사용된다. 실제 값을 계산하는 기능 유닛은 가상 값으로 할당되며, 기능 유닛이 연산을 완료하면 가상 레지스터의 값이 실제 값으로 변환된다.
  • 기능 유닛은 예약 스테이션을 여러 슬롯에서 사용한다. 각 슬롯은 연산 종류, 연산 대상 데이터 등 하나의 명령을 실행하는 데 필요한 정보를 보관한다. 기능 유닛은 명령어에 필요한 입력 데이터가 모두 "실제 값"이 되면 실행을 시작한다.


발행 단계에서는 모든 데이터와 예약 스테이션의 준비가 완료되면 명령이 실행되고, 그렇지 않으면 일시 정지된다. 레지스터의 이름은 이 시점에서 변경되어 WAR 및 WAW에 의한 해저드를 발생시키지 않도록 한다.

  • 명령 큐의 맨 앞에서 다음 명령을 가져온다.
  • 명령으로 처리할 데이터가 레지스터에 있는 경우
  • 사용하지 않는 예약 스테이션이 있으면 (즉, 기능 유닛을 사용할 수 있는 경우) 명령을 발행한다.
  • 사용하지 않는 예약 스테이션이 없으면 (즉, 기능 유닛을 사용할 수 없는 경우) 예약 스테이션이나 버퍼가 준비될 때까지 명령의 실행을 중지한다.
  • 명령으로 처리할 데이터가 레지스터에 없는 경우 가상 값을 사용하여 결과를 계산하는 기능 유닛의 상태를 추적한다.

2. 4. 예약 스테이션 (Reservation Station)

토마술로 알고리즘에서 예약 스테이션은 명령어 실행에 필요한 정보를 저장하고, 기능 유닛의 작동을 관리하는 핵심 구성 요소이다.
예약 스테이션의 역할 및 작동 방식

  • 명령어는 순서대로 발행되지만, 실행은 순서대로 이루어지지 않는다. 이는 파이프라인화되지 않은 프로세서와 동일한 결과를 보장하기 위함이다.
  • 범용 레지스터 및 예약 스테이션 레지스터는 "실제 값" 또는 "가상 값"을 저장한다.
  • 가상 값: 명령어 발행 시점에 연산 결과를 출력하는 레지스터를 사용할 수 없을 때 사용된다.
  • 실제 값: 기능 유닛이 연산을 완료하면 가상 레지스터의 값은 실제 값으로 변환된다.
  • 기능 유닛은 여러 슬롯으로 구성된 예약 스테이션을 사용한다.
  • 각 슬롯은 연산 종류, 연산 대상 데이터 등 하나의 명령을 실행하는 데 필요한 정보를 보관한다.
  • 기능 유닛은 명령어에 필요한 입력 데이터가 모두 "실제 값"이 되면 실행을 시작한다.
  • 발행 단계에서 모든 데이터와 예약 스테이션이 준비되면 명령이 실행되고, 그렇지 않으면 일시 정지된다.
  • 이 시점에서 레지스터 이름이 변경되어 WAR 및 WAW 해저드를 방지한다.

명령어 처리 과정1. 명령어 가져오기: 명령어 큐의 맨 앞에서 다음 명령을 가져온다.

2. 데이터 확인:

  • 명령으로 처리할 데이터가 레지스터에 있는 경우:
  • 사용 가능한 예약 스테이션이 있으면 명령을 발행한다.
  • 사용 가능한 예약 스테이션이 없으면 예약 스테이션이나 버퍼가 준비될 때까지 명령 실행을 중지한다.
  • 명령으로 처리할 데이터가 레지스터에 없는 경우: 가상 값을 사용하여 결과를 계산하는 기능 유닛의 상태를 추적한다.

3. 피연산자 대기: 피연산자 데이터 중 사용할 수 없는 것이 있으면, 공통 데이터 버스(CDB)를 감시하여 계산이 완료될 때까지 기다린다.

4. 데이터 배치: 피연산자 데이터가 사용 가능해지면, 해당 예약 스테이션에 이 데이터를 배치한다.

5. 명령 실행: 피연산자 데이터가 모두 사용 가능해지면 다음과 같이 처리한다.

  • 로드 또는 스토어 명령어:
  • 베이스 주소가 사용 가능하면 유효 주소를 계산한다.
  • 유효 주소를 로드 또는 스토어 버퍼에 저장한다.
  • 로드 명령어는 메모리 유닛이 사용 가능해지는 즉시 실행한다.
  • 스토어 명령어는 메모리 유닛에 보내기 전에 값이 저장될 때까지 대기한다.
  • 그 외의 명령어: 해당 기능 유닛에서 산술 논리 연산 장치(ALU) 연산을 실행한다.

2. 5. 예외 (Exceptions)

명령어는 순차적으로 발행되므로, 명령어 시퀀스의 효과, 예를 들어 이러한 명령에 의해 발생된 예외는 아웃오브오더(즉, 비순차적으로) 실행되고 있다는 사실과 관계없이, 인오더 프로세서에서와 동일한 순서로 발생한다.[1]

실질적으로, 예외에 대한 충분한 상태 정보를 사용할 수 없는 예외가 발생할 수 있으며, 이 경우 프로세서는 '''불정확 예외'''라고 하는 특수한 예외를 발생시킬 수 있다.[1] 불정확 예외는 프로세서 상태가 프로그램 순서대로만 변경되므로 아웃오브오더 실행의 구현에서는 발생할 수 없다.[1]

예외가 발생한 특정 명령을 결정할 수 있는 '''정확 예외'''가 발생하는 프로그램은 예외 지점에서 다시 시작하거나 재실행할 수 있다.[1] 그러나 불정확 예외가 발생하는 프로그램은 일반적으로 시스템이 예외가 발생한 특정 명령을 결정할 수 없으므로 다시 시작하거나 재실행할 수 없다.[1]

3. 명령어 생명주기

토마술로 알고리즘에서 각 명령어는 발행된 시점부터 실행이 완료될 때까지 다음 세 단계를 거친다.[3]


  • 단계 1: 발행 (Issue)
  • 단계 2: 실행 (Execute)
  • 단계 3: 결과 쓰기 (Write Result)

3. 1. 단계 1: 발행 (Issue)

명령어 발행 단계에서는 모든 피연산자와 예약 스테이션이 준비되면 실행을 위해 명령이 발행되고, 그렇지 않으면 지연된다. 이 단계에서 레지스터 이름이 변경되어 WAR 및 WAW 해저드가 제거된다.[3]

  • 명령 큐의 맨 앞에서 다음 명령을 가져온다. 명령 피연산자가 현재 레지스터에 있으면
  • 일치하는 기능 유닛을 사용할 수 있는 경우 명령을 발행한다.
  • 그렇지 않으면, 사용 가능한 기능 유닛이 없으므로 스테이션이나 버퍼가 비어 있을 때까지 명령을 지연시킨다.
  • 그렇지 않으면 피연산자가 레지스터에 없는 것으로 간주하고 가상 값을 사용한다. 기능 유닛은 피연산자를 생성하는 기능 유닛을 추적하기 위해 실제 값을 계산해야 한다.


의사 코드[3]
명령 상태대기작업 또는 부기
FP 연산스테이션 r영어 비어 있음
로드 또는 저장버퍼 r영어 비어 있음
로드 전용
저장 전용




  • 발행 단계에서는 모든 데이터와 예약 스테이션의 준비가 완료되면 명령이 실행되고, 그렇지 않으면 일시 정지된다.
  • 레지스터의 이름은 이 시점에서 변경되어 WAR 및 WAW에 의한 해저드를 발생시키지 않도록 한다.
  • 명령 큐의 맨 앞에서 다음 명령을 가져온다.
  • 명령으로 처리할 데이터가 레지스터에 있는 경우
  • 사용하지 않는 예약 스테이션이 있는 경우 (즉, 기능 유닛을 사용할 수 있는 경우) 명령을 발행한다.
  • 사용하지 않는 예약 스테이션이 없는 경우 (즉, 기능 유닛을 사용할 수 없는 경우) 예약 스테이션이나 버퍼가 준비될 때까지 명령의 실행을 중지한다.
  • 명령으로 처리할 데이터가 레지스터에 없는 경우 가상 값을 사용하여 결과를 계산하는 기능 유닛의 상태를 추적한다.

3. 2. 단계 2: 실행 (Execute)

실행 단계에서는 명령어 연산이 실제로 수행된다. 명령어는 필요한 모든 피연산자가 사용 가능해질 때까지 기다리며, 이는 RAW (Read After Write) 위험을 방지한다. 메모리를 통한 위험을 막기 위해 유효 주소를 계산하여 프로그램의 정확성을 유지한다.

  • 하나 이상의 피연산자가 아직 사용 가능하지 않은 경우: 공통 데이터 버스(CDB)에서 피연산자가 사용 가능해질 때까지 기다린다.
  • 모든 피연산자가 사용 가능하게 되면:
  • 명령어가 로드 또는 저장인 경우:
  • 기본 레지스터가 사용 가능할 때 유효 주소를 계산하고 로드/저장 버퍼에 배치한다.
  • 명령어가 로드인 경우: 메모리 장치가 사용 가능해지는 즉시 실행한다.
  • 명령어가 저장인 경우: 메모리 장치로 보내기 전에 저장할 값을 기다린다.
  • 명령어가 산술 논리 장치(ALU) 연산인 경우: 해당 기능 장치에서 명령어를 실행한다.


의사 코드[3]
명령어 상태대기 조건작업 또는 부기
부동 소수점 연산(RS[r].Qj = 0) and (RS[r].Qk = 0)결과 계산: 피연산자는 Vj 및 Vk에 있다.
로드/저장 1단계RS[r].Qj = 0 & r은 로드-저장 큐의 헤드RS[r].A ← RS[r].Vj + RS[r].A;
로드 2단계로드 1단계 완료Mem[RS[r].A]에서 읽기


3. 3. 단계 3: 결과 쓰기 (Write Result)

결과 쓰기 단계에서 산술 논리 연산 장치(ALU) 연산의 결과는 레지스터에 다시 기록되고 저장 연산은 메모리에 다시 기록된다.

  • 명령어가 ALU 연산인 경우
  • 결과를 사용할 수 있는 경우: CDB(공통 데이터 버스)에 결과를 쓰고, 여기서 레지스터와 이 결과를 기다리는 모든 예약 스테이션에 쓴다.
  • 명령어가 저장 명령어인 경우: 이 단계에서 데이터를 메모리에 쓴다.


의사 코드
명령어 상태대기작업 또는 기록
부동 소수점 연산 또는 로드실행 완료 및 CDB 사용 가능
저장실행 완료


4. 알고리즘 개선 사항

예약 스테이션, 레지스터 리네이밍, 공통 데이터 버스 개념은 토마술로 알고리즘에서 고성능 컴퓨터 설계에 있어 중요한 발전을 보여준다.

예약 스테이션은 데이터 종속성 및 다양한 저장소 접근 시간, 회로 속도와 같은 기타 불일치가 발생해도 피연산자를 대기시켜 기능 유닛을 자유롭게 해준다. 이러한 개선은 긴 부동 소수점 지연 및 메모리 접근 문제를 해결한다. 특히 이 알고리즘은 캐시 미스에 더 강하다. 또한 프로그래머는 최적화된 코드를 구현해야 하는 부담을 덜 수 있다. 이는 공통 데이터 버스와 예약 스테이션이 함께 작동하여 종속성을 유지하고 동시성을 장려한 결과이다.[2]

예약 스테이션에서 명령어의 피연산자를 추적하고 하드웨어에서 레지스터 리네이밍을 수행함으로써 알고리즘은 쓰기 후 읽기 (RAW)를 최소화하고, 쓰기 후 쓰기 (WAW) 및 읽기 후 쓰기 (WAR) 컴퓨터 아키텍처 위험을 제거한다. 이는 스톨에 필요한 시간 낭비를 줄여 성능을 향상시킨다.[2]

알고리즘의 또 다른 중요한 개선 사항은 설계가 특정 파이프라인 구조에 제한되지 않는다는 점이다. 이러한 개선으로 알고리즘은 다중 발행 프로세서에 더 널리 채택될 수 있다. 또한 이 알고리즘은 분기 예측을 쉽게 활용할 수 있도록 확장할 수 있다.[3]

5. 응용 및 계승

토마술로 알고리즘은 System/360 Model 91 아키텍처에 구현되었다. IBM 외에서는 수년간 사용되지 않았다. 하지만 1990년대에 다음 3가지 이유로 사용량이 대폭 증가했다.

# 캐시가 보편화되면서, 알고리즘이 캐시 미스(cache miss)로 인한 예측 불가능한 로드 시간 동안 동시성을 유지하는 기능이 프로세서에서 가치를 얻게 되었다.

# 알고리즘의 동적 스케줄링과 분기 예측은 프로세서가 점점 더 많은 명령을 발행함에 따라 성능 향상을 가능하게 한다.

# 대중 시장 소프트웨어의 확산은 프로그래머가 특정 파이프라인 구조에 맞게 컴파일하는 것을 원하지 않게 됨을 의미했다. 이 알고리즘은 모든 파이프라인 아키텍처에서 작동할 수 있으므로 소프트웨어는 아키텍처별 수정이 거의 필요하지 않다.[3]

많은 최신 프로세서가 토마술로의 원래 알고리즘의 변형인 동적 스케줄링 방식을 구현하며, 여기에는 널리 사용되는 인텔 x86-64 칩이 포함된다.[5][6]

참조

[1] 웹사이트 Robert Tomasulo – Award Winner http://awards.acm.or[...] ACM 2014-12-08
[2] 논문 An Efficient Algorithm for Exploiting Multiple Arithmetic Units IBM 1967-01
[3] 서적 Computer Architecture: A Quantitative Approach Elsevier 2012
[4] 웹사이트 CSE P548 - Tomasulo http://courses.cs.wa[...] Washington University 2014-12-08
[5] 간행물 Intel 64 and IA-32 Architectures Software Developer's Manual http://www.intel.com[...] Intel 2014-12-08
[6] 웹사이트 Differences between Tomasulo's algorithm and dynamic scheduling in Intel Core microarchitecture http://adusan.blogsp[...] 2016-04-04



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com