我想在CUDA中做一个非常基础的示例。我想对一组浮点数进行简单的计算。
vh[x] * k1 + k2
目前我正在尝试这样做,但它没有起作用:
代码 1
#include <vector>
#include <iostream>
#include <thrust/transform.h>
#include <thrust/functional.h>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
using namespace std;
using namespace thrust;
float k1 = 42, k2 = 7;
int main(void)
{
vector<float> vh = { 0, 1, 2, 3, 4, 5, 6, 7 };
device_vector<float> v = vh;
device_vector<float> v_out(v.size());
thrust::transform(v.begin(), v.end(), v_out.begin(), [=] __device__(float x) {
return x*k1 + k2;
});
for (size_t i = 0; i < v_out.size(); i++)
std::cout << v_out[i] << std::endl;
}
我在上面的代码中遇到了非常烦人的lambda函数错误,因此我尝试使用自定义函数,代码如下所示: 代码2
#include <vector>
#include <iostream>
#include <thrust/transform.h>
#include <thrust/functional.h>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
using namespace std;
using namespace thrust;
float k1 = 42, k2 = 7;
float multiply(float x)
{
return x * k1 + k2;
}
int main(void) {
vector<float> vh = { 0, 1, 2, 3, 4, 5, 6, 7 };
device_vector<float> v = vh;
device_vector<float> v_out(v.size());
thrust::negate<float> op;
thrust::transform(v.begin(), v.end(), v_out.begin(), multiply __device__(float x) );
for (size_t i = 0; i < v_out.size(); i++)
std::cout << v_out[i] << std::endl;
std::getwchar();
}
有人能告诉我为什么 Code 1 和/或 Code 2 没有起作用吗?