在opencl中,1般最優(yōu)價值的就是kernel,前面寫的配置文件基本沒有很大的差別,主要是kernel寫法上。其中矩陣運算又是最能體現(xiàn)opencl價值的地方。先上寫的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;
}
}
上面的配置文件看起來簡單其實已包括了兩方面的并行,首先是里面的乘法,這里是對所有的乘法可以進行并行。如果是M×P,P×N的矩陣,那末最多可以進行:M×N×P次乘法,如果沒有超過GPU里面流媒體的處理器個數(shù)的話那末就能夠同時履行,否者也只能滿負荷運行。接著計算完這個以后就是加法的并行操作。用if是避免越界。
在這里要特別說明的就是我們在傳數(shù)據(jù)給從機的時候我們是傳的1維數(shù)組,再通過傳矩陣的維度來還原回2維數(shù)組。
配置文件的說明可以參考我之前的博客:請點擊!
直接貼代碼:
#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個 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] = '
主站蜘蛛池模板:
国产精品久久久久久久免费软件
|
亚洲色图网站
|
成人黄色免费视频
|
国产视频一区二区在线观看
|
国产毛片久久久久久国产毛片
|
黄色片s色
|
可以免费看的av
|
欧美视频网
|
99国产精品久久久
|
精品一区二区三区日本
|
蜜桃永久免费
|
日韩一区二区欧美
|
久热中文字幕
|
五月婷婷综合网
|
天天久久
|
av网站观看|
久久懂色精品99综一区合
|
久久久69
|
懂色av成人一区二区三区
|
精品久久久久久久久久久久久久久久久
|
一区二区三区免费
|
亚洲九九夜夜
|
国产91亚洲精品
|
99久久夜色精品国产亚洲96
|
精品国产精品一区二区夜夜嗨
|
久久久国产精品视频
|
日韩精品在线电影
|
午夜精品久久久久久久久久蜜桃
|
亚洲福利电影网
|
国产一区二区高清
|
亚洲成人网页
|
欧美日韩视频一区二区三区
|
一区二区av在线
|
一区二区三区在线
|
成人国产精品免费观看
|
国产精品亚洲综合
|
一区二区三区精品国产
|
欧美日韩一区三区
|
亚洲精品久久久一区二区三区
|
精品一区二区三区成人精品
|
99精品国产在热久久婷婷
|