제 쿠다 프로젝트의 경우 장치 기능에 단일 정수를 제공하고 싶습니다. 내 기능은장치 기능에 정수를 전송하는 기능이 작동하지 않습니다.
__device__ void PBKDF2_CUDA(const uint8_t password[], const int pass_len, const uint8_t Essid[], const int Essid_len, const int c, const int dkLen, uint32_t T_ptr[], int *PW_len_test)
{
uint32_t Hash_ptr[5] = {0};
uint32_t L[5]={0,0,0,0,0};
uint32_t T[8] = {0};
//Maybe working
/*uint8_t * password_shrinked = (uint8_t*)malloc(8 + 1);
for(int i = 0; i < 8; i++)
password_shrinked[i] = password[i];
password_shrinked[8 + 1] = 0;*/
int password_len = pass_len;
if (pass_len != 8)
{
*PW_len_test = pass_len;
password_len = 8;
}
uint8_t * password_shrinked = (uint8_t*)malloc(sizeof(uint8_t)*(password_len + 1));
for (int i = 0; i < password_len; i++)
password_shrinked[i] = password[i];
password_shrinked[password_len + 1] = 0;
//Some other stuff
free(password_shrinked);
};
처럼 보이는이 같은 커널에서 호출 해요 :
__global__ void kernel(uint8_t Password_list[], const int *Password_len, uint8_t Essid[], int *Essid_len, int *rounds,int *dkLen, uint32_t T[], int pmk_size, int *PW_len_test)
{
int idx= threadIdx.x + blockDim.x*blockIdx.x;
printf("Password_len is: %d\n", Password_len);
PBKDF2_CUDA(Password_list+idx*(8), 8, Essid, *Essid_len, *rounds, *dkLen, T+idx*pmk_size, PW_len_test + idx*sizeof(int));
}
주요 기능에 커널 호출 :
kernel<<<BLOCKS, THREADS>>>(Pass_d, Pass_len_d, Essid_d, Essid_len_d, rounds_d, key_len_d, PMK_d, PMK_size, PW_len_test_d);
을 지금에 관계없이 내가 설정 한 경우 Pass_len_d
~ 8
또는 Pass_len_d
대신 8
으로 커널을 호출하면 장치 기능이 가비지를 생성합니다 잘못된 값을 반환, 아래 설명 참조). 커널 함수 (위 참조) 또는 장치 함수에서 값을 수동으로 설정 한 경우에만 작동합니다.
가비지에서는 일부 반환 값이 암호 목록 (uint8_t 배열)에서 올바르게 계산되지 않지만 다른 값은 올바르게 계산된다는 것을 의미합니다. 어느 단어가 매번 실행될 때 올바르게 계산 된 변경이므로, 어딘가에 경쟁 조건이 있다고 가정하지만 찾을 수는 없습니다.
올바른 cuda 오류 검사를 수행하고 있습니까? cuda-memcheck로 코드를 실행 했습니까? 보고 된 오류가 있습니까? –