日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

CUDA与Java速度比较---生成Julia数据集并画图

發(fā)布時(shí)間:2025/4/5 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CUDA与Java速度比较---生成Julia数据集并画图 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在《GPU編程CUDA實(shí)戰(zhàn)》第45頁有個(gè)Julia數(shù)據(jù)集,本文把這個(gè)CUDA的程序改成了java的,然后每個(gè)程序運(yùn)行20次,統(tǒng)計(jì)時(shí)間,比較這兩個(gè)程序那個(gè)快些。



java(ms)c++(ms)
2021904
2691850
2281737
2421712
1811770
2221774
2721733
2951681
2381320
2821725
2481833
2941478
2641692
1761431
2291479
2301457
2561645
1931802
2391208
2301537
?
239.51638.4


結(jié)果是驚人的,java完成同樣的計(jì)算任務(wù)用的時(shí)間只有CUDA的15%,就這道題來說Java的速度是CUDA的5.8倍.

?

CUDA程序


#include "book.h" #include "cuda_runtime.h" #include "cpu_bitmap.h"#include<iostream> #include <time.h>using namespace std;#define DIM 1000/****************************************/struct cuComplex {float r; float i;__device__ cuComplex(float a,float b) : r(a),i(b) {}__device__ float magnitude2(void){ return r*r+i*i; }__device__ cuComplex operator*(const cuComplex& a) { return cuComplex(r*a.r-i*a.i, i*a.r+r*a.i); }__device__ cuComplex operator+(const cuComplex& a){return cuComplex(r+a.r,i+a.i); }};/***************************************/__device__ int julia(int x ,int y){const float scale =2;float jx=scale*(float)(DIM/2-x)/(DIM/2); float jy=scale*(float)(DIM/2-y)/(DIM/2);cuComplex c(-0.8,0.156); cuComplex a(jx,jy);int i=0;for(i=0 ;i<200; i++){a=a*a+c;if(a.magnitude2()>1000)return 0;}return 1;}__global__ void kernel(unsigned char *ptr){int x=blockIdx.x;int y=blockIdx.y;int offset=x+y*gridDim.x;int juliaValue=julia(x,y);ptr[offset*4+0]=255*juliaValue;ptr[offset*4+1]=0; ptr[offset*4+2]=0; ptr[offset*4+3]=255;}int main(void){clock_t start,ends; start=clock();CPUBitmap bitmap(DIM,DIM);unsigned char *dev_bitmap;HANDLE_ERROR (cudaMalloc( (void**)&dev_bitmap,bitmap.image_size()));dim3 grid(DIM,DIM);kernel<<< grid,1>>>(dev_bitmap);HANDLE_ERROR (cudaMemcpy (bitmap.get_ptr(),dev_bitmap,bitmap.image_size(),cudaMemcpyDeviceToHost ));ends=clock();cout<<(ends-start)*1000/CLOCKS_PER_SEC <<endl; bitmap.display_and_exit();HANDLE_ERROR (cudaFree(dev_bitmap));}

Java程序


import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.io.FileWriter; import java.io.IOException; import java.text.DecimalFormat;import javax.swing.JFrame; import javax.swing.JPanel;public class julia1 extends JFrame {MyPanedrawjulia1 mp = null ; //1public static void main(String[] args) { long sysDate1 = System.currentTimeMillis();julia1 qwe = new julia1(); //2long sysDate2 = System.currentTimeMillis();System.out.println(sysDate2-sysDate1 );} public julia1() //3{ mp = new MyPanedrawjulia1(); //4this.add(mp); this.setSize(3000,2000); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class MyPanedrawjulia1 extends JPanel //用于繪圖和實(shí)現(xiàn)繪圖區(qū)域 //5{ public void paint(Graphics g) { super.paint(g); try {julia( g );} catch (IOException e1) {e1.printStackTrace();}}private void julia(Graphics g) throws IOException{g.setFont(new Font("宋體",Font.BOLD,20));int dim=1000;double c=-0.8;double d=0.156;double rate=1.6;DecimalFormat df = new DecimalFormat( "0.0000000000");for(double a=1 ;a<1000;a++){for(double b=1 ;b<1000;b++){double p1=rate*(dim/2-a)/(dim/2);double p2=rate*(dim/2-b)/(dim/2);double sum=0;for( int n=0 ;n<200;n++ ){double r1=0.0;double r2=0.0;r1=Math.pow(p1, 2)-Math.pow(p2, 2)+c;r2=2*p1*p2+d;p1=r1;p2=r2;sum=sum+(Math.pow(p1, 2)+Math.pow(p2, 2));if (sum>1000){break;}}if(sum<1000){//System.out.println(a+" ***** "+b +" "+sum+" " );g.setColor(Color.red); g.drawOval((int)(a), (int)(b),2, 2);}/*************************************************/}}} }

CUDA生成圖片




Java生成圖片





總結(jié)

以上是生活随笔為你收集整理的CUDA与Java速度比较---生成Julia数据集并画图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。