분류 전체보기

    고성능 파이썬(7)

    C언어로 컴파일하기 코드를 빠르게 하는 가장 쉬운 방법은 처리할 작업의 양을 줄이는 것이다. 작업의 양을 줄이는 방법은 최적의 알고리즘을 사용하고 수행할 명령의 수를 줄이는것이다. 이때 수행할 명령의 수를 줄이는 가장 쉬운 방법은 코드를 기계어로 컴파일 하는 것이다. 컴파일로 빨라지는 부분은 대체로 수학적인 부분이다. 같은 연산을 반보가는 코드를 포함할때 임시 객체를 많이 사용하기 때문이다. 수학 계산에 초점을 맞춘 코드라면 직접 작성한 포트란 루틴이 C로 작성한 루틴보다 더 빠를것이다. 하지만 이는 전문가적인 수준이고 보통 C코드만큼의 성능을 기대할수있다. 이렇게 컴파일을 할때 노력과 실행정도를 따져서 성능개선을 해야하는 부분도 있다. 컴파일 방식 AOT(사이썬) : 미리 컴파일 컴퓨터에 특화된 정적 ..

    고성능 파이썬(6)

    행렬과 벡터계산 루프 안에서 sin(num_iterations) 값은 변경되지 않으므로 매번 계산할 필요가 없다. 파이썬은 벡터 연산을 기본으로 제공하지 않는다. 그 이유는 파이썬의 리스트는 실제 데이터를 가리키는 포인터를 저장한다는 점과 파이썬 바이트 코드는 벡터 연산에 최적화되지 않았다는 점이다. 이때 포인터는 벡터와 행렬 연산에서 성능 저하의 원인이 된다. 예를 들어 example[5][2] 를 실행하면 example 리스트에서 5번째 항목을 찾아 반환한 다음 2번째 항목을 찾아야지만 그 항목의 데이터 위치를 알수있기 때문이다. CPU 로 행렬을 계산하게 되면 어마어마한 미스 레이턴시가 발생한다. 이로 인해 CPU의 성능이 느려지는데, 그 이유는 CPU의 캐시에 데이터를 여러벌 준비할수 없고, 만약..

    고성능 파이썬(5)

    이터레이터와 제너레이터 파이썬 코드는 루프를 지속되는데 range 함수를 호출하는것처럼 보인다. 많약 1억개의 배열을 루프로 만든다고 한다면,이는 시간이 오래걸리고 메모리도 많이 필요할것이다. 제너레이터를 사용하면 이런 종류의 함수를 필요할때마다 지연 계산 할수 있어서 성능상에 영향을 주지 않고도 이런 목적의 함수가 제공하는 높은 코드 가독성을 얻을수 있다. 이로써 피보나치 수를 제너레이터로 1억번 구현하고도 메모리를 적게 사용하고 속도도 더 빠르다

    프로그래머스 - 오픈채팅방

    문제 설명 더보기 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. "[닉네임]님이 들어왔습니다." 채팅방에서 누군가 나가면 다음 메시지가 출력된다. "[닉네임]님이 나갔습니다." 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 채팅방에서 닉네임을 변경한다. 닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다. ..