CUDA 커널에서 문자열, 벡터, 맵 또는 세트와 같은 표준 클래스를 사용하는 방법이 없다는 것을 알고 있습니다. 그러나, 그들 없이는 매우 불편합니다. CUDA 커널에 많은 코드를 작성해야하므로 적어도 문자열과 벡터를 사용하고 싶습니다. 나는 추력 같은 것에 대해 말하는 것이 아닙니다. 이 512 개 스레드를 생성해야CUDA 커널의 STD 클래스
__global__ void kernel()
{
cuda_vector<int> a;
for(int i=0;i<10;i++)
a.push_back(i);
}
int main()
{
kernel<<<1,512>>>();
return 0;
}
각 스레드에서 나는 cuda_vector 클래스를 생성하고 표준 : : 벡터로 사용하려는 :이 같은 것을 쓸 수 있어야합니다. 나는 인터넷에서 어떤 해결책도 찾지 못했고 나는 나 자신의 수업을 쓰기 시작했다. 이 클래스의 각 함수는 "__ host __"및 "__ device __"함수로 정의되어 CPU와 GPU에서 모두 사용할 수 있습니다. 이론적으로는 Fermi 아키텍처에서만 구현 될 수 있습니다. 왜냐하면, 우리는 메모리를 동적으로 할당해야합니다. 나는 GTX 580을 가지고 있고 내 자신의 Vector를 작성하기 시작했다. 그러나 피곤하고 많은 시간이 필요합니다. 사용할 수있는 구현이 없습니까? 나는 아무 것도 없다고 믿을 수 없다. CUDA가 없으면 많은 소프트웨어 개발자가이를 작성합니까? 아무도 자신의 버전을 쓰려고하지 않았습니까?
성능이 좋지는 않습니다. Cuda C 프로그래밍 가이드와 베스트 프랙티스 가이드를 읽어 보면 그 이유를 이해할 수 있습니다. – jmsu
그 점을 이해합니다. 그러나 나는 드물게 문자열과 벡터가 필요하다. 계산적으로 강렬한 부분에서는 사용할 필요가 없습니다. 따라서 성능에 큰 영향을 미치지 않습니다. –