Submit Search
Upload
GPUをJavaで使う話(Java Casual Talks #1)
•
5 likes
•
9,213 views
なおき きしだ
Follow
GPUとは何か、GPUをJavaで使うにはどうするか
Read less
Read more
Software
Report
Share
Report
Share
1 of 29
Download now
Download to read offline
Recommended
Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them All
Michael Mior
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
Yasuhiro Yoshimura
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
昌桓 李
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
Takaki Hoshikawa
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
歩 柴田
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
LINE Corporation
Recommended
Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them All
Michael Mior
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
【関東GPGPU勉強会#2】OpenCVのOpenCL実装oclMat
Yasuhiro Yoshimura
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
昌桓 李
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
アプリをエミュレートするアプリの登場とその危険性 / How multi-account app works
Takaki Hoshikawa
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
DDD 2016 DB 12c クエリー・オプティマイザ新機能活用と統計情報運用の戦略
歩 柴田
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
LINE Corporation
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
Optimizing Apache Spark UDFs
Optimizing Apache Spark UDFs
Databricks
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
LLVM Backend の紹介
LLVM Backend の紹介
Akira Maruoka
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
InfluxDB IOx Tech Talks: Query Engine Design and the Rust-Based DataFusion in...
InfluxDB IOx Tech Talks: Query Engine Design and the Rust-Based DataFusion in...
InfluxData
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
ただいまHadoop勉強中
ただいまHadoop勉強中
Satoshi Noto
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
Ken SASAKI
Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21
Stamatis Zampetakis
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Spark Summit
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Cache勉強会
Cache勉強会
Shinji Miyazato
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
More Related Content
What's hot
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
Optimizing Apache Spark UDFs
Optimizing Apache Spark UDFs
Databricks
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
Tetsuya Kaneuchi
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
LLVM Backend の紹介
LLVM Backend の紹介
Akira Maruoka
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
InfluxDB IOx Tech Talks: Query Engine Design and the Rust-Based DataFusion in...
InfluxDB IOx Tech Talks: Query Engine Design and the Rust-Based DataFusion in...
InfluxData
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
ただいまHadoop勉強中
ただいまHadoop勉強中
Satoshi Noto
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
Ken SASAKI
Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21
Stamatis Zampetakis
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Spark Summit
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Cache勉強会
Cache勉強会
Shinji Miyazato
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
What's hot
(20)
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Optimizing Apache Spark UDFs
Optimizing Apache Spark UDFs
関数プログラミング入門
関数プログラミング入門
ワタシはSingletonがキライだ
ワタシはSingletonがキライだ
メタプログラミングって何だろう
メタプログラミングって何だろう
LLVM Backend の紹介
LLVM Backend の紹介
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
InfluxDB IOx Tech Talks: Query Engine Design and the Rust-Based DataFusion in...
InfluxDB IOx Tech Talks: Query Engine Design and the Rust-Based DataFusion in...
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
ただいまHadoop勉強中
ただいまHadoop勉強中
Hadoopの概念と基本的知識
Hadoopの概念と基本的知識
Apache Calcite Tutorial - BOSS 21
Apache Calcite Tutorial - BOSS 21
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
C++ マルチスレッド 入門
C++ マルチスレッド 入門
Cache勉強会
Cache勉強会
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Similar to GPUをJavaで使う話(Java Casual Talks #1)
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
Takuro Iizuka
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
なおき きしだ
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
C#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA Japan
Cuda
Cuda
Shumpei Hozumi
0621 ndk game
0621 ndk game
cat kaotaro
CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化
翔新 史
機械学習プロ生20151121
機械学習プロ生20151121
なおき きしだ
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
Takahiro Harada
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
yaegashi
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
Yasuhiro Yoshimura
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
android sola
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
聡 大久保
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
5mingame2
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
Makoto Setoh
Similar to GPUをJavaで使う話(Java Casual Talks #1)
(20)
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
C#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめ
Cuda
Cuda
0621 ndk game
0621 ndk game
CUDAを利用したPIV解析の高速化
CUDAを利用したPIV解析の高速化
機械学習プロ生20151121
機械学習プロ生20151121
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
More from なおき きしだ
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
GraalVM at Fukuoka LT
GraalVM at Fukuoka LT
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
なおき きしだ
GraalVMについて
GraalVMについて
なおき きしだ
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
なおき きしだ
最近のJava事情
最近のJava事情
なおき きしだ
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
なおき きしだ
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
なおき きしだ
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
なおき きしだ
これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島
なおき きしだ
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 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 Spr
なおき きしだ
New 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言語と実行環境
これからのJava言語と実行環境
なおき きしだ
JavaOne報告2017
JavaOne報告2017
なおき きしだ
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
なおき きしだ
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
なおき きしだ
More from なおき きしだ
(20)
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVM at Fukuoka LT
GraalVM at Fukuoka LT
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
GraalVMについて
GraalVMについて
VRカメラが楽しいのでブラウザで見たくなった話
VRカメラが楽しいのでブラウザで見たくなった話
最近のJava事情
最近のJava事情
怖いコードの話 2018/7/18
怖いコードの話 2018/7/18
Java新機能観察日記 - JJUGナイトセミナー
Java新機能観察日記 - JJUGナイトセミナー
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
これからのコンピューティングの変化とこれからのプログラミング at 広島
これからのコンピューティングの変化とこれからのプログラミング at 広島
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 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 Spr
New 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言語と実行環境
これからのJava言語と実行環境
JavaOne報告2017
JavaOne報告2017
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
GPUをJavaで使う話(Java Casual Talks #1)
1.
GPUをJavaで使う話 (来れたので) 2015/10/16 きしだ なおき
2.
自己紹介 ● 最近、化物語を見ました。
3.
今日の話 ● GPU速そう ● Cめんどい ● Javaでやりたい ● ディープラーニング書いてみた ● 高速化してみた
4.
CPU ● 高機能・高性能・高粒度 ● OSが実行できる ● 演算器はコアあたり10個程度 – 一チップに100個程度 ● 明示的にメモリを制御できない – いかにキャッシュに載せるか ● =
いかにメモリをまとめて扱うか
5.
GPU ● GPU – ちょうたくさんコアがある – 同じ処理を行う –
行列計算に向いてる ● GTX 970 – 1664コア! – 衝動買い!
6.
GPUの構成 ● いくつかのコアでグループを作る – 同時に同じ命令を実行する – グループだけからアクセスできるメモリをもつ ● コアのグループが多数ある ● コアのグループあたり数個の演算器 –
数千から数万の演算器 – グループ内では同じ演算が行われる ● とってもSIMD
7.
GPUの製品 ● NVIDIA – GeForce –
Tesla ● GPGPU専用 ● AMD – Radeon ● Intel – Intel HD Graphics ● CPUチップに内蔵されたGPU
8.
GPGPU ● General Purpose
computing on GPU ● GPUで汎用計算 ● シミュレーションとか速い ● 最近のスーパーコンピュータはGPUがたくさん載って る
9.
GPGPU環境 ● CUDA – NVIDIA製品用 ●
DirectX – Windows専用 ● OpenCL – OpenGLとか作った団体(Khronos Group)が策定 – さまざまなデバイスで使える – FPGAでも使えたりする
10.
JavaでGPU ● Aparapi – JavaコードをOpenCLに変換 ● OpenCLを呼び出す – OpenCL:並列計算フレームワーク ● AMD始め、IntelやNVIDIAなどが参加 –
JOCL(jogamp.org) – JOCL(jocl.org) – JavaCL ● Project Sumatra – Stream処理を自動的にGPUで行う – Java VMに組み込む
11.
Aparapi ● A PARalell API ● 実行時にJavaコードをOpenCLに変換 ● https://code.google.com/p/aparapi/
12.
Aparapiコード public class AparapiKernel
extends Kernel{ float[] inputA; float[] inputB; float[] output; @Override public void run() { int gid = getGlobalId(); output[gid] = inputA[gid] * inputB[gid]; } public static void main(String[] args) { AparapiKernel kernel = new AparapiKernel(); int elementCount = 1_444_477; kernel.inputA = new float[elementCount]; kernel.inputB = new float[elementCount]; kernel.output = new float[elementCount]; fillBuffer(kernel.inputA); fillBuffer(kernel.inputB); kernel.execute(elementCount); } }
13.
バグがある・・・ • 三項演算子のカッコが反映されない – (修正してプルリクなげてとりこまれてます) •
CPUとの結果と比較するテストを用意したほうがいい – けど、丸めの違いを考慮するの面倒 void proc(int fxy) { float d = (result[fxy] >= 0 ? 1 : 0) * delta[fxy]; tempBiasDelta[fxy] = learningRate * d; } void kishida_cnn_kernels_ConvolutionBackwordBiasKernel__proc(This *this, int fxy){ float d = (float)(this->result[fxy]>=0.0f)?1:0 * this->delta[fxy]; this->tempBiasDelta[fxy] = this->learningRate * d; return; } ↓
14.
JOCL(jogamp.org) ● OpenCLを薄くラップ ● https://jogamp.org/jocl/www/
15.
JOCLのコード String KERNEL_CODE = "kernel
void add(global const float* inputA," + " global const float* inputB," + " global float* output," + " uint numElements){" + " size_t gid = get_global_id(0);" + " if(gid >= numElements){" + " return;" + " }" + " output[gid] = inputA[gid] + inputB[gid];" + "}"; CLContext ctx = CLContext.create(); CLDevice device = ctx.getMaxFlopsDevice(); CLCommandQueue queue = device.createCommandQueue(); CLProgram program = ctx.createProgram(KERNEL_CODE).build(); int elementCount = 1_444_477; int localWorkSize = Math.min(device.getMaxWorkGroupSize(), 256); int globalWorkSize = ((elementCount + localWorkSize - 1) / localWorkSize) * localWorkSize; CLBuffer<FloatBuffer> clBufferA = ctx.createFloatBuffer( elementCount, CLMemory.Mem.READ_ONLY); CLBuffer<FloatBuffer> clBufferB = ctx.createFloatBuffer( elementCount, CLMemory.Mem.READ_ONLY); CLBuffer<FloatBuffer> clBufferC = ctx.createFloatBuffer( elementCount, CLMemory.Mem.READ_WRITE); fillBuffer(clBufferA.getBuffer()); fillBuffer(clBufferB.getBuffer()); CLKernel kernel = program.createCLKernel("add"); kernel .putArgs(clBufferA, clBufferB, clBufferC) .putArg(elementCount); queue.putWriteBuffer(clBufferA, false) .putWriteBuffer(clBufferB, false) .put1DRangeKernel(kernel, 0, globalWorkSize, localWorkSize) .putReadBuffer(clBufferC, true);
16.
比較 ● Aparapi – めちゃ楽 – GPUの性能出しにくい ● JOCL –
ちょっと面倒 – GPUの性能出しやすい
17.
Sumatra ● Java VMに組み込むことを目標 ● 実装難しそう ● コード書くのもわかりにくそう ● 性能出しにくそう ● Java VMに組み込むほどメリットなさそう –
性能欲しい人はOpenCL使うよね
18.
と思ったら ● 「Sumatra is not
in active development for now.(2015/5/1) 」 http://mail.openjdk.java.net/pipermail/sumatra-dev/2015- May/000310.html
19.
ところでディープラーニング 実装してみました
20.
ディープラーニング ● 階層の深いニューラルネット ● 最近、人工知能っていわれてるのは、ほぼこれ
21.
Aparapiを使う ● 15枚/分→75枚/分 ● 1400万枚の画像処理が650日→130日!
22.
DoubleではなくFloatを使う ● ディープラーニングに精度は不要 ● 精度が半分になれば並列度があげれる ● データの転送量が減る ● 75枚/分→95枚/分 ● 1400万枚の画像処理が130日→102日!
23.
JOCLを使う ● 95枚/分→298枚/分 ● 1400万枚の画像処理が102日→34日!
24.
GPUローカルメモリを使う ● 298枚/分→300枚/分 ● 1400万枚の画像処理が34日→33日
25.
違う処理を並列に行う ● 畳み込み層の逆伝播処理 – 重み更新 – 誤差伝播 –
バイアス更新 if(n < deltaCount){ // 誤差伝播 }else if (n < deltaCount + filterCount){ // 重み更新 }else if (n < deltaCount + filterCount + biasCount){ // バイアス更新 }
26.
条件分岐の注意 ● ひとつのグループにif/else両方走ると if→elseの順に両方の処理が走る ● ひとつのグループではどちらかになるように調 整が必要 ● 32個単位くらい
27.
画面表示をはぶく ● 画面表示のためにGPU→CPU間転送が行われて いた ● 300枚/分→320枚/分 ● 1400万枚の画像処理が34日→30日
28.
結果 ● 機械学習 – まだ学習できてません・・・ ● オレ学習 – GPUのプログラミングが学習できました。
29.
まとめ ● GPUで高速化たのしい ● 世の中ね、顔かお金かなのよ
Download now