GN⁺: 웹어셈블리에서 실행되는 포트란
(gws.phd)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)를 사용하지 않아 훨씬 더 많은 작업을 피할 수 있었다고 감사함을 표현