作为初学者一直,经过多次的上网搜索你一定会看到迈克老狼的向量加法的示例,不知道你是否和我一样,刚开始并不是很准确的知道他的add.cl写的代码的意思,源码如下:

#pragma OPENCL EXTENSION cl_amd_printf : enable
__kernel void vecadd(__global const float* a, __global const float* b, __global float* c) { int x = get_global_id(); int y = get_global_id(); int width = get_global_size(); int height = get_global_size(); if(x == && y ==) printf("%d, %d,%d,%d,%d,%d\n",get_local_size(),get_local_size(),get_local_id(), get_local_id(),get_group_id(),get_group_id()); c[x + y * width] = a[x + y * width] + b[x + y * width]; } 我们在k

这里面我把二维的这些值全部罗列出来如下:

int idx = get_global_id(0);
int idy = get_global_id(1);

uint wiWidth = get_global_size(0);
uint wiHeight = get_global_size(1);

uint gix_t = get_group_id(0);
uint giy_t = get_group_id(1);

uint num_of_blocks_x = get_num_groups(0);
uint num_of_blocks_y = get_num_groups(1);

uint lix = get_local_id(0);
uint liy = get_local_id(1);

你会奇怪为什么他的add.cl优化会这么写:

c[x + y * width] = a[x + y * width] + b[x + y * width];

下面进行分析:

add.cpp关键的代码部分如下(只罗列出部分代码):

#define width 8//256
#define height 16//256
#define NWITEMS width*height//262144 size_t globalThreads[] = {width, height};
size_t localx, localy; localx = 2;
localy = 4; size_t localThreads[] = {localx, localy}; clEnqueueNDRangeKernel( queue,
kernel,
2,
NULL,
globalThreads,
localThreads, 0, NULL, &ev);

我自己的add.cl代码如下(里面添加啦打印,以便我们可以看出结果):

   int idx = get_global_id();
int idy = get_global_id(); uint wiWidth = get_global_size();
uint wiHeight = get_global_size();
printf("Magnum Global idx = %d, idy = %d, sizeX =%d,sizeY =%d\n",idx,idy,wiWidth,wiHeight); uint gix_t = get_group_id();
uint giy_t = get_group_id();
uint num_of_blocks_x = get_num_groups();
uint num_of_blocks_y = get_num_groups(); printf("Magnum Group idx = %d, idy = %d, blockX=%d,blockY=%d\n",gix_t,gix_t,num_of_blocks_x,num_of_blocks_y); uint lix = get_local_id();
uint liy = get_local_id(); uint LocalX = get_local_size();
uint LocalY = get_local_size(); printf("Magnum Local idx = %d, idy = %d, localX=%d,localY=%d\n\n",lix,liy,LocalX,LocalY);

输出的结果如下:

Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY= Magnum Global idx = , idy = , sizeX =,sizeY =
Magnum Group idx = , idy = , blockX=,blockY=
Magnum Local idx = , idy = , localX=,localY=

从从这个结果首先能说明几个问题:

首先我们在:

  1. clEnqueueNDRangeKernel( queue, kernel, , NULL, globalThreads, localThreads, 0, NULL, &ev); 设置维度是2,否则add.cl中所有类似get_local_size(1)将只会返回一。
  2. 设置GlobaThreads 和 LocalThreads 不一定是 GlobalThreads= {8, 8}; 也可以不相等,LocalThreads也是一样。
  3. 理解opencl中的内存分布可以理解为二维数组,而且内存寻址的方向就像是:左上角(0,0)为原点,一行一行的扫描下去。
  4. WorkGroup的大小,目前我认为X,Y可以分开来理解(后面若发现错误我会及时改正) WorkGroup number(x) = GlobalThread(x)/LocalThread(x).
  5. 最小的单位是LocalX * LocalY, 然后用总的GlobalThreads按照这个单位进行分割成一个一个的组。每个二维的小单位还是一行一行的扫描过去的。目前我们的这个是8*16,你会发现总的Thread也是8*16,对应的每一个线程执行一次加法操作,有人会问可不可以不用这么多呢,用4*16个Threads,每个线程里面做两次加法动作,其实是可以的,这个原则是根据你的具体的Device来说的,当前我们说的是Device是GPU,比如你的GPU当前支持最大的线程数是1024*1024,这种情况,你不用多的,而是用少的线程来做,会降低你的效率,你需要尽可能的让Device满负荷工作这样才能达到提高运算速度。

继续分析为什么 NDRange改成二维的之后,add.cl变成:

c[x + y * width] = a[x + y * width] + b[x + y * width];

因为在CPU端每个 C[8*16],通过打印可以在这里C[x+y*width],x 最大是7,width是8,y最大是17,只有这样才能做完所有的向量相加。

使用二维NDRange workgroup的更多相关文章

  1. OpenCL 学习step by step (5) 使用二维NDRange workgroup

    http://www.cnblogs.com/mikewolf2002/archive/2012/09/07/2675634.html 在本教程中,我们使用二维NDRange来设置workgroup, ...

  2. Javascript生成二维码(QR)

    网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...

  3. iOS二维码生成、识别、扫描等

    二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...

  4. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  5. 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

    在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...

  6. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  7. 微信小程序的机会在于重新理解群组与二维码

    历时一年,唯一一个尚未发布就获得Pony Ma与Allen Zhang站台的产品:微信小程序,将于2017年1月9日正式上线了.我很期待.唯一要警惕的是:防止长考出臭棋. 在上线前夕,我对于如何借助小 ...

  8. javaScript生成二维码(支持中文,生成logo)

    资料搜索 选择star最多的两个 第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrco ...

  9. 微信小程序二维码推广统计

    微信小程序可以通过生成带参数的二维码,那么这个参数是可以通过APP的页面进行监控的 这样就可以统计每个二维码的推广效果. 今天由好推二维码推出的小程序统计工具HotApp小程序统计也推出了带参数二维码 ...

随机推荐

  1. linux采用模块方法,添加一个新的设备

    该文转载自:http://rangercyh.blog.51cto.com/1444712/521244 系统调用是操作系统内核和应用程序之间的接口,而设备驱动程序是操作系统内核和机器硬件之间的接口. ...

  2. [zz]安装Ubuntu 15.10后要做的事

    很有用,收藏 http://blog.csdn.net/skykingf/article/details/45267517

  3. linux下shell编程示例-获取进程id

    今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...

  4. HTTP协议-标签简介

    这个系列的文章要讨论的是如何通过ASP.net服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展.我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这 ...

  5. 一个关于hightcharts的x轴刻度问题

    最近做公司的一个报表系统,需要折线图,圆柱图形等来进行统计,经过最后考察,决定用当下较为流行的Highchart插件来进行实现,highchart用起来非常方便,只用对后台传过来的数据进行简单的处理后 ...

  6. jquery 缓冲加载图片插件 jquery.lazyload

    第一:加入jquery 第二:加入jquery.lazy.load.js文件 第三:在网页中加<script> $(document).ready(function(){ $(" ...

  7. [C#]『Barrier』任务并行库使用小计

    Barrier  是一个对象,它可以在并行操作中的所有任务都达到相应的关卡之前,阻止各个任务继续执行. 如果并行操作是分阶段执行的,并且每一阶段要求各任务之间进行同步,则可以使用该对象. --MSDN ...

  8. php类的属性

    属性声明是由关键字 public,protected 或者 private 开头,后面跟一个普通的变量声明来组成.属性的变量可以设置初始化的默认值,默认值必须是常量. class Car { //定义 ...

  9. PHP异常处理

    一.异常处理——可以有效地控制多条出现错误或异常的代码 基本语法如下: try{ //可能出现异常的代码 } catch(Exception $e){ //对异常处理 //1.自己处理 //2.不作处 ...

  10. python—cookielib模块对cookies的操作

    最近用python写爬虫爬了点数据,确实是很好用的东西,今天对python如何操作cookie进行一下总结. python内置有cookielib模块操作cookie,配合urllib模块就可以了很轻 ...