트랙
/
C++
C++
/
연습 문제
/
병렬 문자 빈도
병렬 문자 빈도

병렬 문자 빈도

보통

지침

병렬 연산을 사용해 텍스트에서 문자의 빈도를 세어요.

병렬성이란 순차적으로도 할 수 있는 일을 병렬로 처리하는 것을 말해요. 흔한 예시가 바로 문자의 빈도를 세는 거예요. 병렬성을 활용해 여러 텍스트로 이루어진 목록에서 각 문자의 전체 빈도를 계산해요.

C++ 구현을 위한 추가 참고 사항

C++에서 병렬성을 얻는 방법은 여러 가지가 있어요. Exercism의 온라인 러너는 C++17을 지원하므로, 알고리즘 라이브러리의 실행 정책을 사용할 수 있어요. 또 다른 방법은 스레드를 직접 관리하는 거예요. 다만 스레드를 새로 만드는 비용은 꽤 비싸다는 점을 기억해요(스레드 풀을 사용하면 도움이 돼요).

로컬에서 작업할 때는 물론 원하는 무엇이든 사용할 수 있어요. 하지만 비표준 라이브러리를 사용하는 풀이는 Exercism 온라인 러너에서 거의 작동하지 않을 거예요.

벤치마크

로컬에서 작업할 때는 선택적으로 벤치마크를 실행해서 여러 구현의 속도 향상을 가늠해 볼 수 있어요. CMake 플래그 EXERCISM_INCLUDE_BENCHMARK를 활성화하면 벤치마크를 사용할 수 있어요:

cmake -DEXERCISM_RUN_ALL_TESTS=1 -DEXERCISM_INCLUDE_BENCHMARK=1 .

병렬 알고리즘에 대한 컴파일러 지원

GCC의 C++ 표준 라이브러리 구현(libstdc++)은 TBB에 의존해요. TBB를 사용할 수 없으면 병렬 실행을 요청한 경우에도 순차 버전으로 대체돼요.

Ubuntu에서는 libtbb-dev 패키지를 설치해야 해요:

apt-get install libtbb-dev

macOS에서는 Homebrew로 TBB를 설치할 수 있어요:

brew install tbb

Clang libc++는 버전 17부터 병렬 알고리즘을 실험적으로 부분 지원해요. 이를 켜려면 -fexperimental-library 컴파일러 플래그를 지정해야 해요.

Apple Clang 15 및 그 이전 버전은 병렬 알고리즘을 지원하지 않아요.

Linux와 macOS에서는 이 연습 문제에 GCC(기본 libstdc++와 함께)를 사용하는 것을 권장해요.

Microsoft의 MSVC는 적어도 VS 2017 15.7부터 별도의 라이브러리를 설치하지 않고도 병렬 알고리즘을 지원해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C++ Exercism

병렬 문자 빈도 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C++ 트랙을 개념 19개연습 문제 100개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.

병렬 문자 빈도 깊이 살펴보기!

동시성과 병렬성의 차이를 살펴보고, JavaScript, Go, Elixir, Rust 같은 언어들이 택한 여러 접근법을 함께 봐요.