실제 작업을 수행하려는 이유가 많이 있습니다. 우리는 가변 길이 데이터 구조의 목록을 가지고 있기 때문에 모든 요소를 다시 복사하지 않고 요소 중 하나의 크기를 변경할 수 있기를 원합니다.커널 호출에 cl_mem 목록을 전달하는 방법에 대해 어떻게 생각합니까?
여기에 내가 시도한 몇 가지이다 :
- 그냥 커널 인자를 많이 가지고있다. 물론, 해커처럼 들리지만 작은 N을 위해 일합니다. 이것은 실제로 우리가해온 것입니다.
- Do) 1) 커널 args를 최대 크기 (장치에 따라 다르다고 생각합니다.)로 확장시키는 일종의 매크로 루프가 있습니다. 나는 이것을 정말로하고 싶지 않다. .. 그것은 나쁘게 들린다.
- 포인터를 포함하는 일종의 구조체 목록을 만들고 커널 호출 전에 채우십시오. 나는 이것을 시험해 보았는데, 그것이 스펙을 어기는 것이라고 생각한다. nVidia 포럼에서 본 내용에 따르면, 한 번의 커널 호출 이상으로 장치 포인터의 주소를 유지하는 것은 불법입니다. 만약 누군가가 스펙에서 어디서 이것을 가리킬 수 있다면, 나는 그것을 발견 할 수 없기 때문에 이것을 알고 싶다. 그러나 ATI 하드웨어가 오브젝트를 움직이면 확실히 깨질 수 있습니다.
- 가변 크기의 객체를 큰 배열에 저장하고 빈 공간을 사용하는 영리한 알고리즘을 작성하여 전체 배열의 리플 로우 횟수를 줄여야합니다. 이것은 효과가 있지만, 우아하고 복잡한 디자인입니다. 또한, 그것은 무서운 포인터 산술을 많이 필요로 ...
다른 사람이 다른 아이디어가 있습니까? 이것을 시도하는 경험은 어떨까요? 거기에 최소한의 해킹 방법이 있습니까? 왜?