如何使用两个设备来改善例如以下代码的性能(向量之和)?是否可以"同时"使用更多设备?如果是,我如何管理不同设备的全局内存上的向量分配?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <cuda.h>
#define NB 32
#define NT 500
#define N NB*NT
__global__ void add( double *a, double *b, double *c);
//===========================================
__global__ void add( double *a, double *b, double *c){
int tid = threadIdx.x + blockIdx.x * blockDim.x;
while(tid < N){
c[tid] = a[tid] + b[tid];
tid += blockDim.x * gridDim.x;
}
}
//============================================
//BEGIN
//===========================================
int main( void ) {
double *a, *b, *c;
double *dev_a, *dev_b, *dev_c;
// allocate …
Run Code Online (Sandbox Code Playgroud) 我需要以下主机代码的设备版本:
double (**func)(double x);
double func1(double x)
{
return x+1.;
}
double func2(double x)
{
return x+2.;
}
double func3(double x)
{
return x+3.;
}
void test(void)
{
double x;
for(int i=0;i<3;++i){
x=func[i](2.0);
printf("%g\n",x);
}
}
int main(void)
{
func=(double (**)(double))malloc(10*sizeof(double (*)(double)));
test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中func1,func2,func3必须是__device__函数,"test"必须是(适当修改)__global__内核.
我有一台NVIDIA GeForce GTS 450(计算能力2.1),先谢谢Michele
================================================== ======
一个有效的解决方
#define REAL double
typedef REAL (*func)(REAL x);
__host__ __device__ REAL func1(REAL x)
{
return x+1.0f;
}
__host__ __device__ REAL func2(REAL x)
{
return x+2.0f;
}
__host__ …
Run Code Online (Sandbox Code Playgroud) 如何在具有这种数据结构的Gnuplot中绘制(3D绘图)矩阵,使用第一行和第一行作为ax和y刻度(第一行的第一个数字是列数)?
4 0.5 0.6 0.7 0.8
1 -6.20 -6.35 -6.59 -6.02
2 -6.39 -6.52 -6.31 -6.00
3 -6.36 -6.48 -6.15 -5.90
4 -5.79 -5.91 -5.87 -5.46
Run Code Online (Sandbox Code Playgroud)