opencl源码
https://gitee.com/mirrors/hashcat.git
CPU使用冯诺依曼结构,缓存大,处理单元少 GPU处理图像每个像素可以单独处理,缓存小,处理单元很多
opencl
opencl有大多数显卡的驱动版本 opencl访问内存数据
- 获取平台–>clGetPlatformIDs
- 从平台中获取设备–>clGetDeviceIDs
- 创建上下文–>clCreateContext
- 创建命令队列–>clCreateCommandQueue
- 创建缓存->clCreateBuffer
- 读取程序文件,创建程序–>clCreateProgramWithSource
- 编译程序–>clBuildProgram
- 创建内核–>clCreateKernel
- 为内核设置参数–>clSetKernelArg
- 将内核发送给命令队列,执行内核–>clEnqueueNDRangeKernel
- 获取计算结果–>clEnqueueReadBuffer
- 释放资源–>clReleaseXX**
cuda
- kernel核函数,GPU执行
- cpu执行host程序,gpu执行device程序
- _device__声明函数只能被_device、__global__声明函数调用;__global__声明函数在GPU中执行,CPU函数