SlideShare ist ein Scribd-Unternehmen logo
1 von 63
Downloaden Sie, um offline zu lesen
これからの
コンピューティングの変化と
これからの
プログラミング
2018/6/9 きしだ なおき
自己紹介
● きしだ なおき
● LINE Fukuokaで働いています
● プログラミング言語は主にJava
● Twitter:@kis
今日の話
● プログラマが知っておくこと
● ここ最近の変化
プログラマが知っておくこと
プログラマが知っておくこと
● コンピュータサイエンス
– プログラムとはなにか
– 広義にはここに挙げてるものを全部含む
● ソフトウェア工学
– プログラムをどう作るか
● アーキテクチャ
– プログラムをどう動かすか
● UI/UX
– プログラムをどう使うか
コンピュータサイエンス
● 計算理論
● アルゴリズム
● データ構造
● ラムダ計算
● 型理論
● コンパイラ
● etc…
アーキテクチャ
● プロセッサ
● メモリ
● ストレージ
● ネットワーク
ソフトウェア工学
● プロジェクト管理
● プロセス
● 設計手法
● プログラミング言語
● テスト
ムーアの法則
● 18-24ヶ月でトランジスタの数が倍になる
● 寸法半減→スピード2倍、消費電力1/4
https://en.wikipedia.org/wiki/Moore's_law
ムーアの法則の終焉
● 物理的に配置できない
– 5nm=水素原子50個分
● 電子が漏洩する
– 電気を余分に消耗する
● 歩留まりがあがらない
– 製造コスト増
微細化が進んでも今までとは違う
● コストが下がらない
● 低消費電力と高速化を同時に実現できない
● たくさん回路をつんでも、発熱の問題ですべての回路
に電気を流せない
– ダークシリコン問題
● 電力あたりで動かせるトランジスタ数が決まっている
処理を速くするには
● CPUを載せ換えたら勝手に速くなる時代は
10年以上前に終わった
● 並列度をあげる
● より近いところにデータを置く
● 処理に適した計算ユニットを使う
コンピュータの種類
● 古典コンピュータ
– ノイマン型アーキテクチャ
– 非ノイマン型アーキテクチャ
● 量子コンピュータ
– 量子アニーリング
– 量子ゲート
ノイマン型アーキテクチャ
● メモリから命令をよびだして、命令にしたがっ
た回路で処理を行う
● CPU
● GPU
CPU
● 高機能・高性能・高粒度
● 割り込み、権限制御、仮想化、など実行以外の機能
● OSが実行できる
● 演算器はコアあたり10個程度
– 一チップに100個程度
● コアは多くて数十コア
● 明示的にメモリを制御できない
– いかにキャッシュに載せるか
= いかにメモリをまとめて扱うか
GPU
● GPU
– ちょうたくさんコアがある
– 同じ処理を行う
– 行列計算に向いてる
● GTX 1080Ti
– 3584コア!
GPUの構成
● いくつかのコアでグループを作る
– 同時に同じ命令を実行する
– グループだけからアクセスできるメモリをもつ
● 明示的にデータを転送する
● コアのグループが多数ある
● コアあたり数個の演算器
– 数千から数万の演算器
非ノイマン型アーキテクチャ
● ノイマン型では命令の読み込みや解析にトランジス
タを使う
– 電力を食う
– やりたいこと通りに演算器を並べればいいじゃない
● ノイマン型じゃないコンピュータ全体
– FPGA
– ニューラルネット型コンピュータ
FPGA
● Field Programmable Gate Array
– Field 現場で
– Programmable プログラム可能な
– Gate 論理素子が
– Array いっぱい並んだやつ
● 現場でプログラムできる論理回路
回路の入出力の組み合わせ
入力 出力
000 0
100 0
010 0
110 1
001 1
101 1
011 1
111 1
LUT(LookUp Table)
● 入出力をあらかじめメモリにもっておく
● 製品としては4入力LUTや6入力LUT
入力 出力
000 0
100 0
010 0
110 1
001 1
101 1
011 1
111 1
論理ブロック
● Logical Element(LE) Altera
● Logical Cell(LC) Xilinx
配線
● 論理ブロックが格子状に配置
● 周囲に配線
● アイランドスタイル
乗算回路とメモリ
● 乗算やメモリを論理ブロックの組み合わせで
実現すると効率がわるい
● 乗算回路やメモリ(SRAM)がのってる
– 演算器は数百から数千
FPGAの構成
FPGAなら
● 命令を読み込む必要なく、回路をやりたい
処理のとおり並べることができる
FPGAの利点
● 命令を読み込む必要がない
– 処理を行うまでのタイムラグが少ない
● 低レイテンシ
– 命令解析のための回路が不要
● 余分な回路がないので低消費電力
● 細かな並列化
ディープラーニング(深層学習)
● 階層の深いニューラルネット
● 最近、人工知能っていわれてるのは、ほぼこれ
● 学習には大量のデータを処理する必要がある
● 計算的には行列の積和演算
– ab+c
機械学習用演算器
● Google
– Tensor Processing Unit(TPU)
● NVIDIA
– Tensor core
– 4x4行列積和演算
● FPGAなら?
– ネットワークをそのまま回路にできる(かも)
量子コンピュータ
● 量子効果を計算原理に使う
● 通常のコンピュータを古典コンピュータという
● 0と1の重ね合わせの状態をもつ
– 古典コンピュータは0か1かを状態としてもつ
量子コンピュータの種類
● 量子ゲート型
– 量子ビットで論理計算を行う
– 8ビットのすべての組み合わせの処理を行うとき
● 古典コンピュータだと256回繰り返すか256回路必要
● 量子コンピュータだと256パターンの重ね合わせについて一度処理
すればいい
● 量子アニーリング
– 量子効果を用いて最適条件を求める
量子コンピュータの使い道
● 化学計算
● 暗号が解読できるかも?
● 機械学習?
量子耐性暗号
● 量子コンピュータでも解読されない暗号
● 格子暗号など
メモリの変化
● 不揮発メモリ(Non-Volatile Memory:NVM)の
実用化
● Intelの3D XPointなど
– 相変化型メモリ
● DRAMより大容量
● NANDフラッシュより速い
NVMでどうかわるか
● データベースの高速化
– データベースが不要になる?
● 超省電力コンピュータ
– 実行時だけ電気をとおす
データベースとは
● クエリ言語エンジン
● インデクサ
● トランザクション管理
● ブロック型ストレージ管理
● クラスタ管理
言語間でメモリを共有できるか
● NVMに乗せたデータをいろいろな言語で
使いたい
● いちいちシリアライズしたくない
● 言語共通のモデルが必要
GraalとTrufe
● Graal
– Javaで書いたJava JITコンパイラ
● Trufe
– 構文木処理エンジン
– 言語処理が書きやすい
– 言語共通オブジェクトモデル
● Object Strage Model(OSM)
● NVMで使うと便利かも
インフラの変化
● サーバー群の構成の変化
クラウド
● 多数のサーバー
● PaaS(Platform as a Service)
● IaaS(Infra as a Service)
サーバー構成自動化
● 多数のサーバーを手作業で構築できない
● サーバー構築をスクリプト化する
仮想化
● サーバー仮想化
– OSの上で仮想マシンをたてて別のOSを動かす
● ネットワーク仮想化
コンテナ
● サーバー仮想化には目的に対して無駄が多い
● OSカーネルを共通化してファイルパスや
ユーザー、ファイルディスクリプタなど
サーバーリソースだけ隔離
● プロセスごとにコンテナ化もできる
マイクロサービス
● サーバーの構成の自由度があがった
● 機能ごとにサーバーを立てれる
● プラットフォームの自由度があがる
– 基本はJavaだけど課金管理だけGoで書く、など
● 監視やトレースの重要度は上がる
サーバーレス
● リクエストがきたときだけプロセスが起動
● つまりCGI
● (アプリケーション)サーバー(プロセス)レス
● メモリ管理や死活管理が不要
● リソース割り当ての自由度があがる
コンテナオーケストレーション
● 多数のコンテナが必要になる
● コンテナの管理
● Kubernetes
● 監視やトレースなどを仕込める
– 通常はフレームワークごとに設定が必要
● サーバー構築の自動化からサーバー群構築の自動化へ
ソフトウェア工学的変化
● ハードウェアやインフラが変化
● プログラムの作り方も変化
自動テスト
● 関数単位でプログラマが関数によるテストを
書く
CI
● 継続的インテグレーション
– (Continuous Integration)
● ビルドプロセスの自動化
● 自動テストなどを組み込む
● 頻繁なビルドが可能に
Github
● Git
– 分散バージョン管理
● PullRequestによる機能実装の管理
● PullRequestを取り込むときにコードレビュー
● GitにcommitがあったときにCIでビルド・テスト
● なんならそのままデプロイ
SRE
● Site Reliability Engineering
● 運用と信頼性向上を行う
● インフラがソフトウェア化
● 開発作業も自動化
● 全部プログラマができる
プログラミング言語の変化
● 開発マシンや開発対象の変化によりプログラミ
ング言語にも変化
オブジェクト主体から関数主体へ
● Javaにもラムダが!(Java 8)
● GUIからWebへ
– 状態管理からリクエスト管理へ
– ステートフルからステートレスへ
– オブジェクトから関数へ
● メモリ容量が増える
– メモリを使い回す必要がない
● 並列対応
– 値が変わらないことを保証することで、コピーして複数スレッドにばらまける
型推論の普及
● Javaにも型推論が!(Java 10)
– 正確には いままでないと言われていたのは
ローカル変数型推論
● 型が複雑になり、手書きしにくくなる
● 型理論の進化
● コンパイルの高速化
型がなぜ重要か
● B foo(A a) があるとき C baz(A a) を作れる?
C bar(B b)
– つくれる
●
C baz(A a) { return bar(foo(a)) }
カリーハワード同型対応
● 鮭は魚 があるとき 鮭は泳ぐ といえる?
魚は泳ぐ
● 魚 foo(鮭 a) があるとき 泳ぐ baz(鮭 a)を作れる?
泳ぐ bar(魚 b)
● 型と論理は同型
● 型によるプログラムは論理の証明
並列処理対応
● マイクロサービスや外部サービス連携など
サーバー連携の増加
● 待ち時間の増加
– スレッドが無駄に
● ノンブロッキングによるスレッドの効率利用
● リアクティブプログラミング
データによるプログラミング
● 機械学習では学習データの質・量が大事
– データをたくさん集める
– データを適切に前処理する
● 投入データで同じニューラルネットでも処理が
変わる
ユーザーインタフェースの変化
● 機械学習による言語処理性能や画像・音声認識
性能の向上でインタフェースにも変化
チャットボット
● LINEなどチャット上での対話によりプログラ
ムを実行
音声インタフェース
● Clova WAVEやAlexa、Google Homeなど音声
で操作できるスマートスピーカの普及
● 音声で照明やエアコンなどの操作
Virtual Reality
● ヘッドマウントディスプレイでの没入感
● ジェスチャーによる操作
まとめ
● コンピュータは変わる
● みんなも変わろう

Weitere ähnliche Inhalte

Ähnlich wie これからのコンピューティングの変化とこれからのプログラミング at 広島

Data Center As A Computer 2章前半
Data Center As A Computer 2章前半Data Center As A Computer 2章前半
Data Center As A Computer 2章前半
Akinori YOSHIDA
 
Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...
Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...
Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...
Ryousei Takano
 

Ähnlich wie これからのコンピューティングの変化とこれからのプログラミング at 広島 (20)

Azure アプリケーション アーキテクチャ ガイド 紹介
Azure アプリケーション アーキテクチャ ガイド 紹介Azure アプリケーション アーキテクチャ ガイド 紹介
Azure アプリケーション アーキテクチャ ガイド 紹介
 
東京工業大学「ロボット技術・ロボットミドルウェア」
東京工業大学「ロボット技術・ロボットミドルウェア」東京工業大学「ロボット技術・ロボットミドルウェア」
東京工業大学「ロボット技術・ロボットミドルウェア」
 
2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
 
JAWS FESTA 2018 OSAKA AHAB
JAWS FESTA 2018 OSAKA AHABJAWS FESTA 2018 OSAKA AHAB
JAWS FESTA 2018 OSAKA AHAB
 
ソフトウェアとは
ソフトウェアとはソフトウェアとは
ソフトウェアとは
 
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
TotalViewを使ったFOCUSスパコンでのデバッグ体験 2016
 
Bjarne dont speaking
Bjarne dont speakingBjarne dont speaking
Bjarne dont speaking
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
 
女性限定! クラウド勉強会〜データベース、ぶっちゃけ”コレ”が良いってよ
女性限定! クラウド勉強会〜データベース、ぶっちゃけ”コレ”が良いってよ女性限定! クラウド勉強会〜データベース、ぶっちゃけ”コレ”が良いってよ
女性限定! クラウド勉強会〜データベース、ぶっちゃけ”コレ”が良いってよ
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
パタヘネゼミ 第6章
パタヘネゼミ 第6章パタヘネゼミ 第6章
パタヘネゼミ 第6章
 
JAWS DAYS 2019
JAWS DAYS 2019JAWS DAYS 2019
JAWS DAYS 2019
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
Data Center As A Computer 2章前半
Data Center As A Computer 2章前半Data Center As A Computer 2章前半
Data Center As A Computer 2章前半
 
東京工業大学「ロボット技術」ロボットミドルウェア
東京工業大学「ロボット技術」ロボットミドルウェア東京工業大学「ロボット技術」ロボットミドルウェア
東京工業大学「ロボット技術」ロボットミドルウェア
 
「まちの本屋の総合情報サイト」の紹介 カスタマイズ編
「まちの本屋の総合情報サイト」の紹介 カスタマイズ編「まちの本屋の総合情報サイト」の紹介 カスタマイズ編
「まちの本屋の総合情報サイト」の紹介 カスタマイズ編
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...
Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...
Optimizing Overlay-based Virtual Networking Through Optimistic Interrupts and...
 
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
 

Mehr von なおき きしだ

GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
 
New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should knowNew thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
なおき きしだ
 

Mehr von なおき きしだ (20)

GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
 
GraalVM at Fukuoka LT
GraalVM at Fukuoka LTGraalVM at Fukuoka LT
GraalVM at Fukuoka LT
 
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
 
GraalVMについて
GraalVMについてGraalVMについて
GraalVMについて
 
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
 
最近のJava事情
最近のJava事情最近のJava事情
最近のJava事情
 
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
 
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナーJava新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
 
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
 
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
 
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
 
Java10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 SprJava10 and Java11 at JJUG CCC 2018 Spr
Java10 and Java11 at JJUG CCC 2018 Spr
 
New thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should knowNew thing in JDK10 even that scala-er should know
New thing in JDK10 even that scala-er should know
 
Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)Java Release Model (on Scala Matsuri)
Java Release Model (on Scala Matsuri)
 
これからのJava言語と実行環境
これからのJava言語と実行環境これからのJava言語と実行環境
これからのJava言語と実行環境
 
JavaOne報告2017
JavaOne報告2017JavaOne報告2017
JavaOne報告2017
 
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定するNetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
 
JavaOne2016報告
JavaOne2016報告JavaOne2016報告
JavaOne2016報告
 

これからのコンピューティングの変化とこれからのプログラミング at 広島