Skip to content

Instantly share code, notes, and snippets.

View kaityo256's full-sized avatar
🤖
I, Robot

Hiroshi Watanabe kaityo256

🤖
I, Robot
  • Keio University
  • Japan
View GitHub Profile
@kaityo256
kaityo256 / dump.gif
Last active November 14, 2018 10:37
image upload
dump.gif
@kaityo256
kaityo256 / fandcandcompiler.md
Last active June 28, 2024 15:07
FortranとC++とコンパイラと

FortranとC++とコンパイラと

はじめに

将来どうなるかはわからないのだが、とりあえず2018年現在、まだスパコンを使って数値計算をしようとしたらFortranかC++を使わなければならない。で、一般論としてコンパイラはFortranの方が最適化しやすく、似たようなコードをFortranとC++で書いたら、Fortranの方が早くなる、ということはまま起きる。それじゃ全部Fortranでかけばよいのか?というと、世の中そんなに単純では無い気がするよ、という感じのポエムです。

なお、以下に出てくる数値計算結果は筆者の(だいぶ昔の)経験を脚色したもので、実際に存在するアーキテクチャやコンパイラとは全く関係ありませんのであしからず。

C++で書いてみる

@kaityo256
kaityo256 / makefile
Last active June 11, 2018 16:03
Set bits randomly
all: a.out b.out
a.out: randbit.cpp walker.hpp
g++ -O3 $< -o $@
b.out: randbit.cpp walker.hpp
g++ -O3 -DELIMINATE_BRANCH $< -o $@
clean:
rm -f a.out b.out test.dat result.png
@kaityo256
kaityo256 / test.cpp
Created March 6, 2018 09:10
A sample code causing SIGILL on MacOS X
int main(void) {
__asm__("movl $0, 0(%rbp,%rdx,4)");
}
@kaityo256
kaityo256 / re_howto.md
Created January 21, 2018 10:40
Re:研究者として生きていくコツ

Re:研究者として生きていくコツ

これは以前書いた研究者として生きていくコツへの補足のようなものです。主にはてブ等でついたコメントへの返事です。

誰に向けて書いたか?

Twitter等で偶然見かけた、顔も名前も知らないポスドクさんたちの言動を見て、これから研究者を目指す学生さんに向けて書きました。そのポスドクさんたちは分野も違うので、私とは直接の知り合いではありません。何年も前のつぶやきに対する反応で、最近の投稿へのエアリプではありません。

研究者も人間です。長くポスドクをしていると、いつも任期に追われ、かつ自分の望むテーマとは必ずしも合致しないプロジェクトをわたり歩くことで、だんだん「自分は何屋さんなのか」がぼやけてくるなか、同期、後輩がポストを取っていくのを見て焦り、「もっとがんばらなきゃ」と自分を追い込んだり、社会や身近な人に呪詛を吐いたり、ということがありがちです。そんな人たちの言動を見て、将来ある若い人が負の影響を受けないといいな、と思って書いたものです。なので、現在ポスドクをやっている人に向けて書いたものではありません。

@kaityo256
kaityo256 / test.cpp
Created January 21, 2018 06:50
Test for mmapped arena
#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);
@kaityo256
kaityo256 / hpl.md
Last active November 18, 2020 09:34
HPLについて

HPLについて

これは以前Twitterに連投したものと、Qiitaに書いたものをまとめて加筆修正したものです。

はじめに

だいぶ前に一世を風靡し、今はもはや風化し始めている「2位じゃダメなんでしょうか?」という言葉がありました。ここで1位とか2位とか言っているのは、狭義にはスパコンのランキングTOP500の順位のことを指します。TOP500は、HPLというベンチマークによりスパコンの性能を測定し、そのランキングを決めるもので、年に2回ランキングが更新されます。以前、初代地球シミュレータが5期連続でトップを守りましたが、これは5年ではなく、2年半トップであった、というものです。

HPLとは、一言でいえば馬鹿でかい連立一次方程式を解くベンチマークです。問題サイズは自由に決められます。問題サイズが大きいほど性能を出しやすいですが、その分計算時間がかかるようになるため、実際には数時間〜数十時間程度で実行できる範囲のサイズが選ばれることが多いようです。問題が連立一次方程式なので、解いたあとに実際に代入して答えが合っているかどうかを確認します。実際には計算誤差などがあるため、その誤差が規定範囲内に収まっていれば合格となり、その時の演算性能がTOP500への報告値となります。

@kaityo256
kaityo256 / test2.cpp
Last active December 19, 2017 10:15
sample of alignas
#include <iostream>
struct myv4df{
alignas(32) double v[4];
};
void
func(myv4df &a, myv4df &b){
for(int i=0;i<4;i++){
a.v[i] += b.v[i];
@kaityo256
kaityo256 / add_v4df_O0.s
Last active December 19, 2017 09:22
v4df and v8df
add_v4df(double __vector, double __vector):
# parameter 1: %ymm0
# parameter 2: %ymm1
..B1.1: # Preds ..B1.0
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
..___tag_value__Z8add_v4dfU8__vectordS_.1:
..L2:
#9.25
pushq %rbp #9.25
@kaityo256
kaityo256 / test.cpp
Last active November 8, 2017 02:50
Visualize chunk list of malloc
#include <cstdio>
#include <cstdlib>
#include <omp.h>
const int N = 128;
int
main(int argc, char **argv) {
char *buf[N];
size_t size = 128;
#pragma omp parallel for
for (int i = 0; i < N; i++) {