▲neo 4달전 | parent | favorite | on: GN⁺: AVX-512을 사용한 tolower() 함수(dotat.at)Hacker News 의견 Rust와 LLVM 메모리 모델에서 "unsafe read beyond of death" 트릭은 정의되지 않은 동작으로 간주됨 컴파일러는 최적화를 위해 이러한 동작이 발생하지 않는다고 가정할 수 있음 이를 피하려면 인라인 어셈블리를 사용해야 함 AMD의 AVX512 구현과 Intel의 AVX10 경쟁에 대한 호기심이 생김 AVX10은 Intel의 P vs E 코어 문제를 해결하기 위한 것임 AMD는 상황에 맞게 Zen5의 전체 폭 또는 Zen4, Zen5 모바일의 256비트 더블 펌프를 사용함 큰 성능 향상은 Zen4 코어에서 이루어짐 SWAR 최적화는 8바이트 주소에 정렬된 문자열에만 유용함 비정렬된 문자열에 적용하면 원래 알고리즘보다 느림 알고리즘을 세 부분으로 나누면 더 많은 명령어가 필요함 마스크 추가가 깔끔해 보임 .NET 내장 기능에서 AVX512의 마스크 레지스터를 직접 조작할 수 있는 방법이 있었으면 좋겠음 Clang을 사용하면 더 나은 결과를 얻을 수 있음 더 나은 명령어 선택과 잘 풀린 결과를 제공함 짧은 길이의 문자열에 대한 코어 루프는 한 명령어가 더 적음 짧은 문자열을 빠르게 처리하는 것이 중요함 ASCII를 UTF-8로 대문자/소문자 변환하는 유사한 구현을 C#에서 작성함 짧은 문자열이 대부분의 코드베이스를 지배하므로 빠르게 처리하는 것이 중요함 AVX512를 사용하여 텍스트를 uwu로 변환하는 SIMD 사용 예시가 있음 유니코드 문자 변환을 고려하면 더 인상적일 것임 대부분의 프로그래머는 ASCII에만 신경 쓰지만, 표준 문자 집합 외에도 많은 세계가 존재함 과거에 이미지 주위에 검은 테두리를 추가하여 버퍼 SIMD 문제를 피한 경험이 있음 입력을 완전히 제어할 수 없을 때도 있음
Hacker News 의견
Rust와 LLVM 메모리 모델에서 "unsafe read beyond of death" 트릭은 정의되지 않은 동작으로 간주됨
AMD의 AVX512 구현과 Intel의 AVX10 경쟁에 대한 호기심이 생김
SWAR 최적화는 8바이트 주소에 정렬된 문자열에만 유용함
마스크 추가가 깔끔해 보임
Clang을 사용하면 더 나은 결과를 얻을 수 있음
짧은 길이의 문자열에 대한 코어 루프는 한 명령어가 더 적음
ASCII를 UTF-8로 대문자/소문자 변환하는 유사한 구현을 C#에서 작성함
AVX512를 사용하여 텍스트를 uwu로 변환하는 SIMD 사용 예시가 있음
유니코드 문자 변환을 고려하면 더 인상적일 것임
과거에 이미지 주위에 검은 테두리를 추가하여 버퍼 SIMD 문제를 피한 경험이 있음