Recommended
PDF
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PPTX
PDF
これからのコンピューティングとJava(Hacker Tackle)
PDF
PDF
PDF
JavaOne2015報告またはこれからのJava
PDF
PDF
ECMAScript6による関数型プログラミング
PDF
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
ODP
PDF
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
JavaScriptユーティリティライブラリの紹介
PPTX
PDF
なぜリアクティブは重要か #ScalaMatsuri
PDF
Why Reactive Matters #ScalaMatsuri
PPTX
Introduction to GraalVM and Native Image
PDF
PDF
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
PDF
PDF
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
PPT
PDF
PDF
PDF
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
More Related Content
PDF
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PPTX
PDF
これからのコンピューティングとJava(Hacker Tackle)
PDF
PDF
PDF
JavaOne2015報告またはこれからのJava
What's hot
PDF
PDF
ECMAScript6による関数型プログラミング
PDF
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
ODP
PDF
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
JavaScriptユーティリティライブラリの紹介
PPTX
PDF
なぜリアクティブは重要か #ScalaMatsuri
PDF
Why Reactive Matters #ScalaMatsuri
PPTX
Introduction to GraalVM and Native Image
PDF
PDF
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
PDF
PDF
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
PPT
PDF
Viewers also liked
PDF
PDF
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
PPT
PDF
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
PDF
PPTX
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
PDF
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
PDF
PDF
PPTX
PPTX
PDF
PDF
Similar to これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
PPTX
PPTX
PPTX
PDF
PDF
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PDF
PDF
PDF
これからのコンピューティングの変化とこれからのプログラミング at 広島
PDF
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
KEY
関ジャバ JavaOne Tokyo 2012報告会
PDF
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
PPTX
もしも… Javaでヘテロジニアスコアが使えたら…
PDF
KEY
JJUG CCC 2012 Real World Groovy/Grails
PDF
Synthesijer and Synthesijer.Scala in HLS-friends 201512
PDF
PDF
PDF
PDF
PDF
More from なおき きしだ
PDF
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
PPTX
New thing in JDK10 even that scala-er should know
PDF
GPUをJavaで使う話(Java Casual Talks #1)
PDF
PDF
PDF
Java10 and Java11 at JJUG CCC 2018 Spr
PDF
PDF
PDF
Summary of JDK10 and What will come into JDK11
PDF
Summary of JDK10 and What will come into JDK11
PDF
PPTX
Java Release Model (on Scala Matsuri)
PDF
PDF
PDF
Java新機能観察日記 - JJUGナイトセミナー
PDF
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
PDF
JavaOne2017で感じた、Javaのいまと未来 in 大阪
PDF
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. JavaでCPU(並列)
● Stream
int elementCount = 1_444_477;
float[] inputA = new float[elementCount];
float[] inputB = new float[elementCount];
float[] output = new float[elementCount];
IntStream.range(0, elementCount).parallel().forEach(i -> {
output[i] = inputA[i] * inputB[i];
});
29. 30. 31. 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);
}
}
32. 33. 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);
34. 35. 36. 37. 38. 39. 40. 41. 42. 43. と思ったら
● 「Sumatra is not in active development for
now.(2015/5/1) 」
http://mail.openjdk.java.net/pipermail/sumatra-dev/2015-May/000310.html
44. 45. 46. Synthesijerが出力したコード
module Test
(
input clk,
input reset,
input flag_in,
input flag_we,
output flag_out,
output run_busy,
input run_req
);
wire clk_sig;
wire reset_sig;
wire flag_in_sig;
wire flag_we_sig;
wire flag_out_sig;
reg run_busy_sig = 1'b1;
wire run_req_sig;
reg class_flag_0000 = 1'b0;
wire class_flag_0000_mux;
wire tmp_0001;
reg signed [32-1 : 0] class_count_0001 = 0;
reg signed [32-1 : 0] unary_expr_00005 = 0;
reg binary_expr_00007 = 1'b0;
reg unary_expr_00011 = 1'b0;
wire run_req_flag;
reg run_req_local = 1'b0;
wire tmp_0002;
localparam run_method_IDLE = 32'd0;
localparam run_method_S_0000 = 32'd1;
localparam run_method_S_0001 = 32'd2;
localparam run_method_S_0002 = 32'd3;
localparam run_method_S_0003 = 32'd4;
localparam run_method_S_0004 = 32'd5;
すごく長い
47. 48. 49. 50. 51. 52. 53. 54. Unsafeの代替
利用例 代替
並列化プリミティブ JEP 193 Variable Handles
シリアライズ JEP 187 Serialization
メモリ管理 Project Panama
Project Valhalla
Arrays 2.0
JVM外とのやりとり Project Panama
JEP 191 FFI
55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 既存コードは省略形
● iload → vload :I
● daload → vaload :D
– さらにinvokeinterface Array.getElementの略に
できるかも!
83. Arrays 2.0
● 配列をインターフェイスに!
public interface Array<any X extends Ordinal, any E> {
X arrayLength();
E getElement(X n);
void setElement(X n, E e);
Array<X,E> clone();
Array<X,E> freeze();
Array<X,E> slice(X from, X to); // creates shared view
Array<X,E> copyOf(X length); // Arrays.copyOf
Array<X,E> copyOfRange(X from, X to); // Arrays.copyOfRange
boolean arrayEquals(Array<E> that); // Arrays.equals
int arrayHashCode(); // Arrays.hashCode
String arrayToString(); // Arrays.toString
84. 85. という夢をみました
● Java VM Language Summit 2015
http://www.oracle.com/technetwork/java/javase/community/jlssessions-2015-2633029.html
86.