Câu hỏi đặt ra là: có cách nào để sử dụng lớp "vector" trong hạt nhân Cuda không? Khi tôi thử, tôi nhận được lỗi sau:Sử dụng std :: vector trong mã thiết bị CUDA
error : calling a host function("std::vector<int, std::allocator<int> > ::push_back") from a __device__/__global__ function not allowed
Vì vậy, có cách nào để sử dụng vectơ trong phần toàn cầu? Gần đây tôi đã thử như sau:
- tạo một dự án CUDA mới
- đi đến tài sản của dự án
- mở CUDA C/C++
- đi đến Device
- thay đổi giá trị trong "Mã Thế hệ "được đặt thành giá trị này: compute_20, sm_20
........ sau đó tôi có thể sử dụng chức năng thư viện chuẩn printf trong hạt nhân Cuda của tôi.
có cách nào để sử dụng lớp thư viện chuẩn vector
trong cách printf được hỗ trợ trong mã hạt nhân không? Đây là một ví dụ của việc sử dụng printf trong mã kernel:
// this code only to count the 3s in an array using Cuda
//private_count is an array to hold every thread's result separately
__global__ void countKernel(int *a, int length, int* private_count)
{
printf("%d\n",threadIdx.x); //it's print the thread id and it's working
// vector<int> y;
//y.push_back(0); is there a possibility to do this?
unsigned int offset = threadIdx.x * length;
int i = offset;
for(; i < offset + length; i++)
{
if(a[i] == 3)
{
private_count[threadIdx.x]++;
printf("%d ",a[i]);
}
}
}
+1 câu hỏi hoàn toàn hợp pháp (không chắc chắn lý do tại sao nó được bình chọn xuống. Thật không may là câu trả lời hiện nay chưa có. – harrism