내 프로그램:100% CPU 및 RAM 기반, 수행수학적 계산, 처음에는 HDD의 데이터를 RAM으로 읽습니다.스레드 간 통신이 없습니다.스레드는 모두같은 시간또한 (거의).
질문:
내 프로그램이 CPU 스레드 수와 동일한 스레드를 사용하는 경우 2 CPU 시스템에서 어떤 종류의 성능을 기대할 수 있습니까?
각각 16개의 스레드가 있는 2개의 8코어 제온을 사용하므로 총 16x2 = 32개의 스레드가 됩니다. 내 프로그램이 32개의 스레드를 사용하고 모두 100% 사용량을 사용하는 경우 동일한 단일 CPU에 비해 성능이 두 배로 향상됩니까?
답변1
실제로, 당신이 줄 수 있는 최선의 대답은 "아마도 그렇지 않을 수도 있지만 상황에 따라 다르다"입니다. 사용 가능한 원시 CPU 마력은 두 배이지만 다음과 같습니다.
실제로 사용 가능한 메모리 대역폭의 두 배는 없습니다.
CPU 사이의 일부 캐시 라인을 "핑퐁"하는 데는 시간이 걸립니다.
때로는 하나의 스레드가 다른 스레드를 기다려야 하며 스레드가 많을수록 더 많은 일이 발생합니다.
때로는 해야 할 일이 많아도 한꺼번에 다 할 수 없는 경우가 있습니다.
등등.
매우 드물지만 실제로 얻을 수 있는 경우는 다음과 같습니다.더2배 이상의 성능을 발휘합니다. 작업이 캐시 제한되어 있는 경우 코어가 많다는 것은 스레드가 더 오랫동안 실행될 수 있다는 것을 의미할 수 있으며(다른 코어가 수행하고 있기 때문에 코어는 다른 작업을 수행하지 않기 때문입니다) CPU 캐시가 더 오랫동안 뜨거운 상태를 유지할 수 있습니다.
답변2
성능 관련 질문에 대한 궁극적인 대답은 추측하지 말고 테스트해 보는 것입니다!
답변3
당신은 다음 작업을 하고 있는 것 같군요.당황스러울 정도로 평행하다컴퓨팅 작업의 경우 대답은 '예'입니다. 처리량은 사용된 총 CPU 스레드에 따라 거의 선형적으로 확장됩니다.