1P by neo 2달전 | favorite | 댓글 1개

Fortran과 WebAssembly의 결합

  • Fortran은 1957년에 처음 등장한 오래된 프로그래밍 언어로, C 언어, 인텔 4004 CPU, IBM System/360 메인프레임 컴퓨터보다 오래되었음.
  • Fortran은 과학 및 공학 응용 프로그램에서 계산 집약적인 작업에 사용되어 왔으며, 일부는 C보다 수치 연산에 더 효율적이라고 여겨짐.
  • 이 블로그 게시물은 기존의 Fortran 코드를 WebAssembly로 컴파일하여 웹 브라우저에서 실행할 수 있도록 하는 방법에 대해 설명함.

문제는 무엇인가?

  • Fortran을 WebAssembly로 컴파일하는 다양한 방법이 있지만, 모든 기능을 완벽하게 지원하는 방법은 없음.
  • 각 방법마다 단점이 있으며, 간단한 플러그 앤 플레이 솔루션은 아님.

컴파일러 요약

  • LLVM 기반의 Fortran 컴파일러에 몇 가지 변화가 있었음.
  • f2c 유틸리티는 Fortran 77을 C 코드로 변환하지만, 현대의 Fortran 코드와 호환되지 않음.
  • LFortran 컴파일러는 많은 기능을 지원하게 되었으나, 여전히 일부 프로젝트에서 문제가 발생할 수 있음.
  • Dragonegg는 GCC의 플러그인으로 LLVM IR을 생성하지만, 오래된 버전의 GCC와 LLVM이 필요함.
  • Classic Flang은 32비트 출력을 지원하지 않으며, LLVM Flang은 현재 WebAssembly 출력을 기본적으로 생성하지 않음.

LLVM Flang으로 WebAssembly 빌드 및 사용

  • LLVM Flang 소스를 수정하여 WebAssembly 타겟을 구현해야 함.
  • LLVM의 모듈식 설계를 활용하여 Flang 프론트엔드와 WebAssembly 백엔드를 사용할 수 있음.

Fortran 서브루틴을 C에서 호출하기

  • Fortran 서브루틴을 C 프로그램의 일부로 컴파일하고 링크하는 방법을 복습함.

LLVM Flang으로 돌아가기

  • LLVM Flang 컴파일러를 사용하여 Fortran 서브루틴을 컴파일할 수 있으나, WebAssembly 타겟이 아직 구현되지 않았기 때문에 소스 코드에 패치를 적용해야 함.

Fortran 루틴을 JavaScript에서 호출하기

  • Emscripten을 사용하여 Fortran 객체를 링크하고 JavaScript에서 직접 호출할 수 있음.

Fortran 런타임 라이브러리: "Hello, World!"로 가는 여정

  • "Hello, World!" 프로그램을 Fortran으로 빌드하려고 할 때 발생하는 문제를 설명함.
  • LLVM Fortran 런타임 라이브러리를 WebAssembly용으로 컴파일해야 함.

GN⁺의 의견

  • 이 기사는 Fortran과 같은 전통적인 언어를 현대 웹 기술과 통합하려는 시도를 보여줌. 이러한 접근 방식은 기존의 검증된 수치 계산 라이브러리를 웹으로 가져오는 데 유용할 수 있음.
  • Fortran을 WebAssembly로 컴파일하는 과정은 기존 코드베이스를 새로운 플랫폼으로 이식하는 데 있어서의 도전을 잘 보여줌. 특히 크로스 컴파일링과 관련된 문제는 다른 언어나 플랫폼으로의 이식 시에도 고려해야 할 중요한 요소임.
  • 이 기술이 흥미롭긴 하지만, 실제로 웹에서 고성능을 요구하는 수치 계산 작업을 수행하는 것은 여전히 실용적인 한계가 있음. 웹 어셈블리는 아직 전통적인 네이티브 애플리케이션만큼의 성능을 제공하지 못할 수 있음.
  • LLVM Flang의 개발은 매우 활발하며, 이러한 개발 노력은 Fortran 커뮤니티에 긍정적인 영향을 미칠 것으로 기대됨. 그러나 이 기사에서 언급된 여러 가지 문제점들은 아직 해결해야 할 과제를 시사함.
  • 이 기사는 Fortran을 웹 기술과 통합하려는 개발자들에게 유용한 정보를 제공하며, 특히 수치 해석이나 과학 계산 분야에서 웹 기반의 도구 개발을 고려하는 사람들에게 도움이 될 수 있음.
Hacker News 의견
  • 조지가 웹브라우저에서 R을 실행하기 위해 WebR 프로젝트에 참여하면서 Fortran에 대해 연구한 내용

    • R 소스코드에는 상당량의 Fortran 코드가 포함되어 있음
    • 원래 WebR은 Fortran을 C로 변환하는 f2c를 사용했으나, LLVM Flang의 패치를 통해 진짜 Fortran 컴파일러로 빌드 가능
    • 조지는 블로그 포스트에서 직접 언급하지 않았지만, Flang이 그의 패치를 받아들이거나 더 나은 패치를 구현하기를 희망함
    • 이러한 패치가 별도로 유지될 필요 없이, 수정되지 않은 Flang이 wasm으로 컴파일할 수 있게 되면 Fortran을 사용하는 다른 프로젝트에도 도움이 될 것임
  • 20년 전 Xilinx에서 FORTRAN 컴파일 작업을 했던 경험

    • 기억에 남는 것은 f2c.h 헤더 파일에 'barf'라는 정의가 포함되어 있었다는 점
  • LLVM 프로젝트의 최신 소스를 사용하여 f18을 빌드하는 것을 추천

    • LLVM 프로젝트는 빠르게 움직이며, 이미 해결된 문제를 디버깅하거나 이미 구현된 기능을 놓치는 것은 시간 낭비라고 언급
  • "가장 간단한 비트리비얼 예제" 접근 방식을 통한 설명 방식에 대한 칭찬

    • 구체적인 문제인 "자바스크립트에서 BLAS 함수 호출"을 기반으로 많은 것을 배울 수 있었다고 함
  • 웹 어셈블리 개발에 대한 지식 부족을 언급

    • 웹 어셈블리가 현재 소비자에게 제공할 수 있는 것이 있는지, 아니면 모든 것이 진정으로 이식 가능한 프로그램의 미래를 위한 기반을 마련하는 것인지 궁금해함
    • 웹 어셈블리가 네트워크, 파일 접근을 제한하는 데 도움이 된다는 소문을 들었지만, 이것이 이론적인지 실제로 구현된 것인지 확실하지 않음
  • 자바스크립트에서 선형대수를 위한 "생산" 준비가 된 생태계 존재 여부에 대한 질문

    • 구글링을 통해 종종 오래된 라이브러리들이 자바스크립트로 포팅된 것을 발견하지만, 놓치고 있는 것이 있는지 궁금해함
  • 1981/82년에 작성한 Fortran 78 코드를 보관했더라면 현재 이것을 실행할 수 있을지 보고 싶다는 의견

    • 당시에는 Fortran을 사용할 수밖에 없었던 Jovial 프로그래밍 언어 소스 코드 포맷터에 대한 언급
  • LFortran에 대한 더 많은 언급이 없는 것이 이상하다고 언급

    • LFortran은 온라인에서 훌륭하고 놀라운 WASM 예제를 제공함
  • .NET과 Java에서의 Fortran 사용에 대한 정보 제공

    • 관련 링크를 통해 Fortran이 .NET과 Java에서 사용될 수 있음을 나타냄
  • TensorFlow를 브라우저용으로 컴파일하는 작업 경험 공유

    • TensorFlow가 Eigen을 사용했기 때문에 Fortran으로 작성된 인기 있는 수학 라이브러리(BLAS, Lapack)를 사용하지 않아 훨씬 더 많은 작업을 피할 수 있었다고 감사함을 표현