我想在CUDA中做一個非常基本的例子。我想對浮動列表做一個簡單的計算。Thrust :: transform自定義函數
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();
}
誰能告訴我爲什麼代碼1和/或代碼2不工作?
您使用的是CUDA和推力版本? – talonmies
CUDA 7.5,我猜是推力1.7.0。自從我安裝CUDA後,我還沒有更新它。 – Anonymous