Cython 코드 내에서 AES-NI 명령어를 사용할 수 있습니까?Cython의 AES-NI 내장 함수는 무엇입니까?
내가 찾을 수있는 가장 가까운 사람이 SIMD 명령에 액세스하는 방법입니다 https://groups.google.com/forum/#!msg/cython-users/nTnyI7A6sMc/a6_GnOOsLuQJ
파이썬 스레드에서AES-NI는 대답하지 않은 : Python support for AES-NI
Cython 코드 내에서 AES-NI 명령어를 사용할 수 있습니까?Cython의 AES-NI 내장 함수는 무엇입니까?
내가 찾을 수있는 가장 가까운 사람이 SIMD 명령에 액세스하는 방법입니다 https://groups.google.com/forum/#!msg/cython-users/nTnyI7A6sMc/a6_GnOOsLuQJ
파이썬 스레드에서AES-NI는 대답하지 않은 : Python support for AES-NI
당신은 그들이 '처럼 단지 내장 함수를 정의 할 수 있어야한다 Cython에서 정상적인 C 함수를 다시 작성하십시오.
cdef extern from "emmintrin.h": # I'm going off the microsoft documentation for where the headers are
# define the datatype as an opaque type
ctypedef struct __m128i x:
pass
__m128i _mm_set_epi32 (int i3, int i2, int i1, int i0)
cdef extern from "wmmintrin.h":
__m128i _mm_aesdec_si128(__m128i v,__m128i rkey)
# then in some Cython function
def f():
cdef __m128i v = _mm_set_epi32(1,2,3,4)
cdef __m128i key = _mm_set_epi32(5,6,7,8)
cdef __m128i result = _mm_aesdec_si128(v,key)
질문 비슷해 "어떻게이는 bytes
배열을 통해 신청합니까?" 먼저 bytes 배열의 char*
을 얻습니다. 그런 다음 range
(끝에서 벗어나지 않도록주의)으로 반복하십시오. [pycrypto AESNI.c] 등
# assuming you already have an __m128i key
cdef __m128i v
cdef char* array = python_bytes_array # auto conversion
cdef int i, j
# you NEED to ensure that the byte array has a length divisible by
# 16, otherwise you'll probably get a segmentation fault.
for i in range(0,len(python_bytes_array),16):
# go over in chunks of 16
v = _mm_set_epi8(array[i+15],array[i+14],array[i+13],
# etc... fill in the rest
array[i+1], array[i])
cdef __m128 result = _mm_aesdec_si128(v,key)
# write back to the same place?
for j in range(16):
array[i+j] = _mm_extract_epi8(result,j)
반복 할 때마다 함수 호출 오버 헤드없이 어레이를 디코딩하는 루프를 생성 할 수 있습니까? 그렇지 않다면 아마도 C 코드를 인 코드/디코드해야 할 것입니다. –
예 - 그렇게 생각합니다. Cython은 배열에 대해 반복 수행 할 수있는 C 코드를 생성 할 수 있으며 C와 비슷한 속도로 C 함수를 호출 할 수 있습니다. C 컴파일러가 이러한 "함수 호출"을 보았을 때 실제로는 단일 프로세서 명령어 (바라건대!)로 변환해야합니다. 함수 호출하기). – DavidW
환상적입니다. 이제 이것을 바이트 (파이썬 3) 객체에 어떻게 적용합니까? – ArekBulski
있는 정보 (https://github.com/dlitz/pycrypto/blob/master/src/AESNI.c)? –
@ J.J.Hakala 그런 다음 샘플 코드를 제공하고 대답으로 지정하십시오. – ArekBulski