은 내가 스파 스 행렬을 나타 내기 위해이 구조체를 사용하려는구조 :: device_vector
struct Point
{
int x;
int y;
float val;
}
같은 구조를 가지고 (나는 CUSPARSE과 끝을 알고 모르지만, 난 그냥 추력을 사용하여 몇 가지 테스트를 수행 할 예정) 및 추진 알고리즘을 사용하여 작업을 수행하십시오.
내가 CUDA 프로그래밍 튜토리얼에서 공부 한 내용은 항상 메모리 병합을 위해 구조체 배열보다는 배열 구조체를 사용하는 것이 좋습니다.
만약 위의 구조체를 사용하여 device_vector 안에 0이 아닌 값 (수백만 단위로)을 저장하면이 장치 _ 벡터는 추력 알고리즘을 처리하는 동안 GPU 내부에서 정렬되지 않은 메모리 액세스를 사용합니까?
이 device_vector 내의 불규칙한 스트라이드에 액세스하고 복수 함수 객체를 전달하여 알고리즘 연산을 수행해야 할 수도 있기 때문에이 질문을드립니다.
배열의 구조체에서 작동하는 사용자 정의 커널만큼 효율적입니까?
감사합니다.
특히 커스텀 커널에 대해서는 동의 하겠지만, 추력에 대한 특별한 사용을 위해서는 단순히 3 개의 장치 벡터 (또는 좌표의 경우 벡터 쌍/튜플 또는 데이터의 경우 벡터)를 사용하는 것이 좋습니다. 더 간단하고 쉽게 작업 할 수 있습니다. – talonmies
죄송합니다, 나는 추력에 관한 부분을 놓쳤습니다. 그 사건을 다루기 위해 내 대답을 편집했습니다. 대역폭에 제약이있는 경우 작은 구조체를 사용하고 추력에서 작동하도록 사용자 지정 펑터를 작성하는 것이 더 효율적일 수 있습니다. – harrism
@harrism ... 내 구조체를 정의하는 동안 __align__ 연산자를 사용하여 끝내니까 고마워. 내면 밀어 넣을 때 효율적으로 사용할 수 있을까? – Recker