제 의도가 제대로 전달되지 않아서 오해가 생긴 듯 하군요. 그걸 말하려던게 아니었는데.비회원 wrote:큐비 wrote:거의 모든 연산은..
동시에 병렬로 (한 코어 안에서) 처리될 수 있고
미리 처리될 수도 있습니다
요즘에는 한 코어에서 연산할때 사용하고 남는 파이프라인을 활용한 연산도 한다더군요
특히 연산 자체의 문제가 아닌 데이터의 문제가 될수도 있구요.. 이를테면 캐쉬문제죠
두가지의 복합적인 문제일 수도 있습니다. 연산에 따라 캐시 hit rate 가 달라지니..
결론은, 실제 코드를 실행중일때는 한 연산에 대한 절대적인 속도 측정은 매우 힘들며
(아주 특수한 분야를 제외하고는) 측정을 할 필요도 없다는 거죠
오류가 많은 발언입니다.
"거의 모든 연산이 동시에 병렬로 처리될 수 있고" => 사실이 아닙니다.
보통 이론적으로 얻을 수 있는 싱글스레드 내에서 동시에 처리 가능한 명령어의
수는 4~5개에 불과합니다. 그러니까 superscalar 구조에서 파이프라인 차선이 3~4개
정도가 있는 것이지요.
그런데 실제로는 명령어들 사이에 dependency가 많아서 이것 조차도 나오지 않습니다.
완전히 독립된 스레드에서 명령어를 가져와서 실행하면 (=하이퍼스레딩) 모를까
싱글 스레드에서 명령어를 뽑아와서 최대한으로 병렬로 처리하는 것은 제약이 많습니다.
말씀하신대로만 되었다면.. 이미 좋은 세상에서 살고 있었을 것입니다.
'거의 모든 연산이 동시에 병렬로 처리될 수 있고' => '거의 모든 연산은 병렬로 처리될 가능성이 존재하고'
이걸로 정정하는걸로 하겠습니다