로우레벨 프로그래밍의 시대가 돌아오나?

gurugio의 이미지

어젯밤 야근의 후유증으로 졸다가 꿈결에 상상한 내용이오니
비약이 심하더라도 살살 꾸짖어 주세요 ;-)

요즘 멀티코어-병렬프로그래밍이 난리입니다.
근데 수근수근 소문도 무성하고 걱정도 많은데
커널의 지원, 컴파일러의 지원, 자동화 툴, 소프트웨어 라이브러리 개발에 대한
결정적인 해결책이 나타나지 않는것 같습니다.
잘 아시는 분들이 연구하시거나 사용하시는 방법말고
저같은 일반 개발자가 쉽게 사용할 수 있는 그런 솔루션을 찾기가 힘든것 같습니다.

김민장님의 블로그 http://minjang.egloos.com/2201698 에서 볼 수 있듯이
하드웨어의 변화가 생기면서 한 십년넘게 지속된 공짜 점심이 사라지는것 같습니다.
제 생각에는 제가 대학에 입학할 90년대 말에도
자바가 나오고 추상화된 언어들에 대한 수요가 많고
좀더 편리하고 빠른 개발에 대해 집중했던것 같습니다.
게임들을 봐도 당장 발표될 때에는 너무나 고사양을 요구하지만
몇달만 지나면 금방 일반적인 사양이 되었던 기억이 납니다.

이제 그런 페러다임이 바뀌는것 같습니다.
세세한 것들은 잘 모르지만 소프트웨어 개발자가 멀티코어를 고려한 모듈화에 신경써야 하고
심각한 경우에는 컴파일러의 최적화를 고려하면서 코딩해야 할것 같습니다.
프로세서의 비순차/순차 실행 특성에 따라서 생각할 것들도 생길것 같구요.

아직은 저도 마땅히 알아본 바가 없어서 그냥 막연히 상상만 하지만
소프트웨어 개발자가 하드웨어를 이해해야하는 필요성이 지금보다는 더 커지는게 아닌가
하는 생각이 강하게 듭니다.
얼마전 x86_64프로세서의 SMP 기능을 아주 살짝 만져봤는데
커널 개발자들이 MP를 위해서 얼마나 고생을 했을지 생각만 해도 감사가 절로 나오더라구요.

사실 국내에 있으면서 계속 어셈블리나 커널 같은 로우레벨 분야를 공부해야 하나
고민을 많이 했습니다만 앞으로 컴파일러와 커널에 대해서 계속 공부하면서
오픈소스 프로젝트로 병렬처리에 대한 실험들을 해봐야겠다는 결심이 듭니다.

음..결론은 어셈러브 화이팅~..
자기 사이트 광고할 뿐이고...왠지 욕먹을것 같을 뿐이고...

댓글

lawch의 이미지

이게 연구자들에게도 핫이슈에요 멀티코어한다고 하면 몸값이 올라가니...
제가 아는 프로그래밍 언어들을 보면...

- Haskell 진영 : Haskell에서는 Data Parallel을 지원하고 있답니다...
- SML 진영 : Manticore라는 프로젝트하에 Data Parallel을 지원하는 언어 개발 중
- MS의 F# 진영 : .Net에 Parallel 확장형이 추가되어 F# 같은 언어가 이를 적극적으로 이용
- 인텔 : Ct라는 언어는 C/C++의 확장으로 멀티코어 및 GPU 상의 Data Parallel을 지원...
- Java : 구체적으로 본 적은 없지만 Java+Data Parallel로 검색하니 많이 걸리는 군요...

눈치채셨겠지만 전부 Data Parallel을 추가하는 형태인데
큰 데이타를 다루는 계산을 쪼개서 여러 코어에게 일을 시키고
이를 모아서 결과를 얻는다는 90년대의 프로그래밍 모델을 다시 복원시키고 있는 것이 핵심입니다.
예전에 멀티프로세서나 분산시스템 수준에서 하던 일들이 일반 프로그래머들에게도 현실이 되고 있다고 할까요.
달라진 점은 예전에는 프로그래머가 일일이 일을 분담하고 동기화 등을 처리했다면
이제는 프로그래머에게 최소한의 부담만을 주어 예를 들면 Data Parallel이 가능한 부분에 간단한 표시만 해주면
컴파일러가 적당히 스레드들을 만들어서 멀티코어들에 분배하고 동기화 등을 자동으로 처리해 주게 해주자는 것입니다.

개인적으로 제 생각에 멀티코어 세상이 되어도 추상화된 세상에서 편하게 사는 프로그래머들은 계속 있을 것이고
이런 세상이 유지되도록 밑바닥에서 고생하는 컴파일러 개발자나 라이브러리 엔지니어들의 일은 더욱 늘어나겠죠.
디버거나 프로파일러의 역할도 늘어갈 것이고요.

충분한 프로그래밍언어나 개발도구들이 나오기 전까지 당분간은 게임 개발하시는 분들이 특히 고생많으시겠죠...

>사실 국내에 있으면서 계속 어셈블리나 커널 같은 로우레벨 분야를 공부해야 하나
>고민을 많이 했습니다만 앞으로 컴파일러와 커널에 대해서 계속 공부하면서
>오픈소스 프로젝트로 병렬처리에 대한 실험들을 해봐야겠다는 결심이 듭니다.

>음..결론은 어셈러브 화이팅~..

어셈러브 만세...

gamdora의 이미지

Erlang 쪽은 어떻습니까~?

lawch의 이미지

Erlang 자체가 분산시스템에 최적화되어 설계된 언어라죠.
최근에 나온 "프로그래밍 얼랭"이란 책 뒤표지에...

> 얼랭은 여러분이 고수준의 병행 분산 장애허용 시스템을 구축할 수 있도록 해 주는데,
> 이 시스템은 상업적으로 여러 해 동안 대형의 장애허용 고가용성 시스템을 만드는데 사용되어온 것이다.

...라고 나와있죠. 분산시스템에서 결국 중요한 것은 서로다른 시스템간에
어떻게 데이타를 공유하고 동기화할 것인가의 문제인데 얼랭은
공유메모리를 통한 공유 및 동기화가 아니라 메시징 방식에 의한 공유 및 동기화를 통해서
병행 분산 시스템을 지원했는데 이게 자연스럽게 멀티코어에서도 장점으로 작용한다는군요.
그냥 그 정도 수준으로만 알고 있습니다.

사족으로 위의 책 표지에 나온 "대형의 장애허용 고가용성 시스템"은 에릭슨의 전자교환기를 말합니다.
애초에 C나 Unix도 AT&T의 전자교환기를 만들기위해서 나왔었다죠.
얼랭이나 C나 결국에는 범용언어들이지만 초기엔 킬러어플리케이션이 있어서 성장할 수 있었다는 생각이 듭니다.

잘은 모르지만 몇자 적었습니다.

M.W.Park의 이미지

Erlang은 매우 아름답죠.
물론 병렬화 지원도 포함해서...

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.