東京大学物性研究所 物質設計評価施設
渡辺宙志
渡辺宙志
富士通株式会社 次世代テクニカルコンピューティング開発本部
千葉修一
千葉修一
| #include <random> | |
| int main() { | |
| std::mt19937 mt; | |
| std::uniform_real_distribution<> ud(0.0, 1.0); | |
| for (int j = 0; j <10000; j++) { | |
| for (int i = 0; i < 10000; i++) { | |
| if (i%2) ud(mt); | |
| } | |
| } | |
| } |
| { | |
| "latex-workshop.latex.recipes": [ | |
| { | |
| "name": "platex*2+dvipdfmx", | |
| "tools": [ | |
| "platex", | |
| "platex", | |
| "dvipdfmx" | |
| ] | |
| } |
| require "yaml" | |
| class Paper | |
| def initialize(h) | |
| @h = h | |
| @h.each_key do |key| | |
| self.class.send(:define_method, key.to_sym) do | |
| @h[key] | |
| end | |
| self.class.send(:define_method, ("has_"+key+"?").to_sym) do |
| n = ARGV[0].to_i | |
| s = (1..n).to_a.map { |i| i.to_s }.join(",") | |
| s = "{" + s + "}" | |
| puts <<"EOS" | |
| #include <cstdio> | |
| const int N = #{n}; | |
| const int a[] = #{s}; | |
| int func(int b[N]) { |
| #include <cstdio> | |
| int func(int b[4]) { | |
| int a[] = {1, 2, 3, 4}; | |
| int sum = 0; | |
| for (int i = 0; i < 4; i++) { | |
| sum += a[i] * b[i]; | |
| } | |
| return sum; | |
| } |
| #include <cstdio> | |
| const int a[] = {1, 2, 3, 4}; | |
| int func(int b[4]) { | |
| int sum = 0; | |
| for (int i = 0; i < 4; i++) { | |
| sum += a[i] * b[i]; | |
| } | |
| return sum; |
2019年3月14日、Googleが円周率を31兆桁計算したと発表しました。このニュースを聞いて僕は「GoogleがノードまたぎFFTをやったのか!」と大変驚き、「円周率の計算には高度な技術が必要」みたいなことをつぶやきました。しかしその後、実際にはシングルノードで動作する円周率計算プログラム「y-cruncher」を無改造で使っていることを知り、「高度な技術が必要だとつぶやいたが、それは撤回」とつぶやきました。円周率の計算そのもののプログラムを開発していなかったとは言え、これだけマッシブにディスクアクセスのある計算を長時間安定実行するのは難しく、その意味においてこの挑戦は非自明なものだったのですが、まるでその運用技術のことまで否定したかのような書き方になってしまい、さらにそれが実際に計算を実行された方の目にもとまったようで、大変申し訳なく思っています。
このエントリでは、なぜ僕が「GoogleがノードまたぎFFT!?」と驚いたか、そんな話を書いてみたいと思います。
| #include "test.hpp" | |
| int main(){ | |
| } |
| #include <cstdio> | |
| #include <cstdlib> | |
| #include <omp.h> | |
| const int N = 128; | |
| int main(void) { | |
| char *buf[N]; | |
| #pragma omp parallel for | |
| for (int i = 0; i < N; i++) { | |
| buf[i] = (char *)malloc(128); | |
| } |