在opencl中,1般最優(yōu)價(jià)值的就是kernel,前面寫(xiě)的配置文件基本沒(méi)有很大的差別,主要是kernel寫(xiě)法上。其中矩陣運(yùn)算又是最能體現(xiàn)opencl價(jià)值的地方。先上寫(xiě)的kernel:
__kernel void matrix_mult(
const int Ndim,
const int Mdim,
const int Pdim,
__global const float* A,
__global const float* B,
__global float* C)
{
int i = get_global_id(0);
int j = get_global_id(1);
int k;
float tmp;
if ((i < Ndim) && (j < Mdim)) {
tmp = 0.0;
for (k = 0; k < Pdim; k++)
tmp += A[i*Pdim + k] * B[k*Mdim + j];
C[i*Mdim + j] = tmp;
}
}
上面的配置文件看起來(lái)簡(jiǎn)單其實(shí)已包括了兩方面的并行,首先是里面的乘法,這里是對(duì)所有的乘法可以進(jìn)行并行。如果是M×P,P×N的矩陣,那末最多可以進(jìn)行:M×N×P次乘法,如果沒(méi)有超過(guò)GPU里面流媒體的處理器個(gè)數(shù)的話那末就能夠同時(shí)履行,否者也只能滿負(fù)荷運(yùn)行。接著計(jì)算完這個(gè)以后就是加法的并行操作。用if是避免越界。
在這里要特別說(shuō)明的就是我們?cè)趥鲾?shù)據(jù)給從機(jī)的時(shí)候我們是傳的1維數(shù)組,再通過(guò)傳矩陣的維度來(lái)還原回2維數(shù)組。
配置文件的說(shuō)明可以參考我之前的博客:請(qǐng)點(diǎn)擊!
直接貼代碼:
#include <CL/cl.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <fstream>
using namespace std;
#define NWITEMS 6
#pragma comment (lib,"OpenCL.lib")
//把文本文件讀入1個(gè) string 中
int convertToString(const char *filename, std::string& s)
{
size_t size;
char* str;
std::fstream f(filename, (std::fstream::in | std::fstream::binary));
if (f.is_open())
{
size_t fileSize;
f.seekg(0, std::fstream::end);
size = fileSize = (size_t)f.tellg();
f.seekg(0, std::fstream::beg);
str = new char[size + 1];
if (!str)
{
f.close();
return NULL;
}
f.read(str, fileSize);
f.close();
str[size] = '
主站蜘蛛池模板:
亚洲国产精品综合久久一线
|
91精品国产综合久久久久久
|
亚洲精品在线视频观看
|
avtt天堂网 手机资源
|
中文字幕国产欧美
|
免费网址在线观看
|
亚洲区小说区图片区qvod
|
成人精品视频一区二区三区
|
亚洲激情小视频
|
国产精品久久一区二区三区
|
欧美一区二区三区精品
|
亚洲视频在线视频
|
最新中文字幕在线观看
|
free性video另类重口
|
国产欧美成人免费观看视频
|
久久国产三级
|
国产成人精品日本亚洲网站
|
国产成人三级经典中文
|
久久www成人看片
|
免费日本毛片
|
一级白嫩美女毛片免费
|
一级做a爰片久久毛片欧美
一级做a爰片久久毛片人呢
|
91精品免费在线观看
|
国产女人在线
|
欧美a色|
九九福利影院
|
77777亚洲午夜久久多人
|
欧美成人毛片一级在线
|
国产高清在线精品一区在线
|
国产成人精品天堂
|
中文字幕免费在线看
|
国产一级淫片a免费播放口欧美
|
亚洲精品一区最新
|
国内交换一区二区三区
|
亚洲产国偷v产偷v自拍涩爱
|
日韩成人精品日本亚洲
|
鸡毛片|
伊人俺去久久涩五月综合
|
波多野结衣一区二区三区88
|
亚洲欧美综合另类图片小说区
|
九色 在线|