Jetson Nano 性能测试


Jetson Nano 性能测试

1、CPU计时和GPU计时对⽐

1.1 GPU动态频率下测试FFT耗时

//第1次测试
FFT LENGTH : 1048576
Gpu clock : 13.941823 ms
Cpu Clock : 0.084000 ms
//第2次测试
FFT LENGTH : 1048576
Gpu clock : 14.107969 ms
Cpu Clock : 0.087000 ms
//第3次测试
FFT LENGTH : 1048576
Gpu clock : 17.229115 ms
Cpu Clock : 0.105000 ms

1.2 GPU锁最⾼频测试

//921M 锁频
//第1次测试
FFT LENGTH : 1048576
Gpu clock : 3.566250 ms
Cpu Clock : 0.091000 ms
//第2次测试
FFT LENGTH : 1048576
Gpu clock : 3.564010 ms
Cpu Clock : 0.116000 ms
//第3次测试
FFT LENGTH : 1048576
Gpu clock : 3.583594 ms
Cpu Clock : 0.096000 ms

2、整体性能测试

2.1 GPU动态频率下测试

//第1次测试
FFT LENGTH : 1048576
CpuMem2GpuMem : 6.026094 ms
FFT use time : 15.625417 ms
GpuMem2CpuMem : 6.198854 ms
Total time :27.850365 ms
//第2次测试
FFT LENGTH : 1048576
2.2 GPU锁最⾼频率下测试
3、性能对⽐
3.1 TMS320C6678 性能
CpuMem2GpuMem : 6.088542 ms
FFT use time : 14.518177 ms
GpuMem2CpuMem : 6.637500 ms
Total time :27.244219 ms
//第3次测试
FFT LENGTH : 1048576
CpuMem2GpuMem : 9.515364 ms
FFT use time : 27.618490 ms
GpuMem2CpuMem : 10.108125 ms
Total time :47.241978 ms

2.2 GPU锁最⾼频率下测试

//第1次测试
FFT LENGTH : 1048576
CpuMem2GpuMem : 4.264896 ms
FFT use time : 3.800885 ms
GpuMem2CpuMem : 6.094115 ms
Total time :14.159896 ms
//第2次测试
FFT LENGTH : 1048576
CpuMem2GpuMem : 4.782812 ms
FFT use time : 3.651094 ms
GpuMem2CpuMem : 5.188437 ms
Total time :13.622343 ms
//第3次测试
FFT LENGTH : 1048576
CpuMem2GpuMem : 4.732708 ms
FFT use time : 3.666042 ms
GpuMem2CpuMem : 5.137031 ms
Total time :13.535781 ms

3、性能对⽐

3.1 TMS320C6678 性能

image-20220723192425815

3.2 Nano 性能

在nano测试中采⽤1024kfft进⾏性能测试,在最终结果如前两章所⽰。cpu计时并不准确,所以最终结 果以GPU计时为准。 在当前测试中,Nano的GPU使⽤率仅在1/4左右,在实际应⽤中,代码有进⼀步优化的空间。在实际使 ⽤中,内存拷⻉时间也可以进⼀步缩短。

image-20220723192446034

4、源码

#include "stdio.h"
#include "cuda_runtime.h"
#include "cufft.h"
#include "device_launch_parameters.h"
#include "time.h"
#include "math.h"
#define LENGTH 1048576
int main()
{
    cudaEvent_t startTime, endTime1,endTime2,endTime3;
    cudaEventCreate(&startTime);
    cudaEventCreate(&endTime1);
    cudaEventCreate(&endTime2);
    cudaEventCreate(&endTime3);
    float Data[LENGTH] = {0};
    cufftHandle plan;
    cufftPlan1d(&plan,LENGTH,CUFFT_C2C,1);
    cufftComplex *CompData=(cufftComplex*)malloc(LENGTH*sizeof(cufftComplex));
    cufftComplex *d_fftData;
    cudaMalloc((void**)&d_fftData,LENGTH*sizeof(cufftComplex));
    int i;
    for(i=1;i<LENGTH;i++)
    {
    	Data[i] = sin((i)/100.0);
    }
    for(i=0;i<LENGTH;i++)
    {
    	CompData[i].x=Data[i];
    	CompData[i].y=0;
    }
    cudaEventRecord(startTime);
    cudaMemcpy(d_fftData,CompData,LENGTH*sizeof(cufftComplex),cudaMemcpyHostToDevice
    );
    cudaEventRecord(endTime1);
    cufftExecC2C(plan,(cufftComplex*)d_fftData,
    (cufftComplex*)d_fftData,CUFFT_FORWARD);
    cudaEventRecord(endTime2);
    cudaMemcpy(CompData,d_fftData,LENGTH*sizeof(cufftComplex),cudaMemcpyDeviceToHost
    );
    cudaEventRecord(endTime3);
    cudaEventSynchronize(endTime1);
    cudaEventSynchronize(endTime2);
    cudaEventSynchronize(endTime3);
    float t1,t2,t3,t4;
    cudaEventElapsedTime(&t1, startTime, endTime1);
    cudaEventElapsedTime(&t2, endTime1, endTime2);
    cudaEventElapsedTime(&t3, endTime2, endTime3);
    cudaEventElapsedTime(&t4, startTime, endTime3);
    cufftDestroy(plan);
    free(CompData);
    cudaFree(d_fftData);
    printf("FFT LENGTH : %d \n", LENGTH);
    printf("CpuMem2GpuMem : %f ms \n", t1);
    printf("FFT use time : %f ms \n", t2);
    printf("GpuMem2CpuMem : %f ms \n", t3);
    printf("Total time :%f ms \n", t4);
    return 0;
}

文章作者: Liuss
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Liuss !
评论
  目录