처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.05.17 34

하스켈로 GPU를 굴린다? 함수형 병렬 라이브러리 Accelerate 다시 보기

Hacker News 원문 보기
하스켈로 GPU를 굴린다? 함수형 병렬 라이브러리 Accelerate 다시 보기

"함수형 언어로 GPU를 다룬다고?"

여러분이 GPU 프로그래밍 한다고 하면 보통 CUDA, OpenCL, 아니면 PyTorch나 JAX 같은 게 떠오를 거예요. 그런데 하스켈(Haskell)로 GPU를 굴리는 라이브러리가 있다는 사실, 알고 계셨나요? 바로 Accelerate예요. GitHub의 AccelerateHS 조직에서 관리하고 있고, 의외로 꽤 오래된 프로젝트인데도 꾸준히 업데이트되고 있어요.

처음 들으면 "함수형 언어로 GPU를?" 싶을 수 있어요. GPU는 본질적으로 명령형(imperative)이고, 메모리를 직접 만지는 저수준 영역이잖아요. 거기에 부작용을 싫어하는 하스켈을 얹는다는 게 어색하게 들리죠. 그런데 따져보면 GPU 프로그래밍은 사실 "같은 연산을 수많은 데이터에 병렬로 적용하는 것"이에요. 이게 바로 함수형 프로그래밍의 핵심인 map, fold, scan 같은 고차 함수와 정확히 닮았어요. 오히려 함수형이 GPU와 더 잘 어울린다는 주장도 있을 정도예요.

Accelerate가 동작하는 방식

Accelerate는 하스켈 내부에 작은 DSL(도메인 특화 언어)을 만들어요. 이걸 임베디드 DSL(EDSL)이라고 부르는데, 쉽게 말하면 "하스켈 문법을 그대로 쓰는데, 안에서 짜는 코드는 사실 GPU용 명령어로 컴파일되는" 거예요.

예를 들어 두 배열을 곱하는 코드를 짠다고 해볼게요. 하스켈 일반 리스트라면 zipWith (*) xs ys 라고 쓸 텐데, Accelerate에서도 거의 똑같이 써요. 단지 자료형이 Vector Int가 아니라 Acc (Vector Int)로 감싸져 있을 뿐이에요. 이 Acc라는 래퍼가 핵심이에요. Acc로 감싼 표현은 즉시 실행되지 않고, 계산 그래프(computation graph)로 쌓이거든요.

그래프가 다 만들어진 다음에 run 함수를 호출하면, Accelerate가 그 그래프를 분석해서 LLVM IR로 변환하고, 다시 CUDA나 멀티코어 CPU 코드로 컴파일해요. JAX나 텐서플로의 그래프 모드와 컨셉이 비슷한데, 차이점은 이 모든 게 하스켈 타입 시스템 안에서 검증된다는 거예요. 잘못된 차원의 행렬 연산은 런타임이 아니라 컴파일 단계에서 잡혀요. 새벽 3시 운영 환경에서 "shape mismatch" 떴다고 페이저 울리는 일이 줄어드는 거죠.

다른 GPU 프레임워크와 비교하면

PyTorch나 JAX는 파이썬 생태계에서 압도적이지만, 타입 안전성은 약해요. 텐서 차원이 안 맞아서 런타임에 오류 나는 일이 흔하죠. JAX의 jit이나 vmap은 함수형적인 발상에서 출발했지만, 여전히 동적 타입의 한계를 가져요.

Halide는 이미지 처리 쪽에서 비슷한 EDSL 접근을 쓰는데, 하스켈이 아니라 C++ 안에서 동작해요. 더 가까운 비교 대상은 Rust 진영의 Burn이나 Candle, 혹은 OCaml의 Owl 같은 함수형 친화적 ML 프레임워크예요. 그중에서도 Accelerate는 가장 오래된 축에 속하고, 그래서 학술적인 깊이가 있어요. 실제로 영국과 호주의 대학 연구자들이 만든 학술 출신 프로젝트거든요.

성능적으로는 단순 NumPy 연산보다는 훨씬 빠르지만, 최신 PyTorch/JAX의 깊이 있는 최적화에는 못 미치는 게 솔직한 평가예요. 다만 타입 안전한 GPU 코드라는 매력은 여전히 독보적이에요.

어떤 사람에게 의미가 있을까

솔직히 말하면 Accelerate를 프로덕션에서 쓰는 회사는 많지 않아요. 한국에서도 거의 들어본 적이 없을 거예요. 그런데도 이 프로젝트를 알아두면 좋은 이유가 있어요.

첫째, 함수형 사고로 병렬 프로그래밍을 바라보는 훈련이 되어요. CUDA를 짤 때는 스레드 인덱싱부터 신경 써야 하지만, Accelerate에서는 "이 데이터에 이 함수를 적용한다"만 표현하면 돼요. 이런 추상화는 다른 언어에서도 응용이 가능해요. Rust의 rayon이나 Java의 Stream API에도 비슷한 발상이 있죠.

둘째, EDSL 패턴 자체가 흥미로워요. 자체적인 도메인에 맞는 미니 언어를 만들고, 그걸 백엔드 코드로 컴파일하는 패턴은 ML 컴파일러, 쿼리 빌더, 인프라스트럭처 도구 같은 다양한 분야에서 응용돼요. 가령 Drizzle ORM이나 SQLAlchemy의 쿼리 빌더, dbt의 SQL DSL 같은 게 모두 같은 발상이거든요. Accelerate를 들여다보면 "내가 만드는 DSL은 어떻게 설계하면 좋을까"에 대한 영감을 받을 수 있어요.

셋째, 타입 시스템으로 차원 안전성을 보장한다는 발상이 점점 메인스트림으로 들어오고 있어요. 최근 TypeScript에서 dimension 타입을 지원하려는 시도, 파이썬의 jaxtyping 같은 라이브러리들이 다 비슷한 방향이에요. Accelerate는 이런 흐름의 원조 격이라고 볼 수 있어요.

한국 개발자가 얻을 점

Haskell을 모르더라도 Accelerate의 코드 예제를 한 번 훑어보시길 권해요. 함수형 스타일이 어떻게 병렬 처리와 자연스럽게 어울리는지 체감할 수 있거든요. 특히 ML 인프라를 다루는 분, 컴파일러나 DSL 설계에 관심 있는 분, 혹은 그냥 색다른 시각을 얻고 싶은 분에게 좋아요.

요즘 한국에서도 함수형 프로그래밍이 다시 관심을 받고 있어요. Kotlin의 Arrow, Scala의 ZIO, TypeScript의 fp-ts 같은 라이브러리가 활발하잖아요. 그런 관점에서 Accelerate는 "함수형이 어디까지 갈 수 있는가"의 한 극단을 보여주는 사례예요.

정리하면

Accelerate는 당장 실무에서 쓸 도구는 아닐 수 있어요. 하지만 함수형 사고로 GPU와 병렬성을 바라보는 시각은 분명 가치 있어요. 여러분은 함수형 패러다임이 시스템 프로그래밍이나 GPU 같은 저수준 영역까지 얼마나 들어올 수 있다고 생각하세요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.